Bitcoin Forum
November 13, 2024, 11:30:29 PM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Unable to compile bitcoin  (Read 8769 times)
ioctlvoid (OP)
Newbie
*
Offline Offline

Activity: 10
Merit: 0


View Profile
July 19, 2011, 10:22:15 AM
 #1


I've been trying for several days to compile bitcoin, without having succeeded. Please help me.

My system is a standard x86 running 32-bit Slackware 13.1.0, I'm trying to compile bitcoin-0.3.24.

When I use the standard makefile.unix I get the following compiler errors:

Code:
In file included from headers.h:43,
                 from util.cpp:4:
/usr/include/db_cxx.h:65:16: error: db.h: No such file or directory
In file included from headers.h:43,
                 from script.cpp:4:
/usr/include/db_cxx.h:65:16: error: db.h: No such file or directory
In file included from headers.h:43,
                 from db.cpp:5:
/usr/include/db_cxx.h:65:16: error: db.h: No such file or directory
In file included from headers.h:43,
                 from net.cpp:5:
...

When I use my modified makefile (based on http://heliacal.net/~solar/bitcoin/bitcoin-linuxbuild.pdf ) I get the following errors:

Code:
ui.cpp:19: error: expected constructor, destructor, or type conversion before '(' token
ui.cpp:22: error: expected constructor, destructor, or type conversion before '*' token
ui.cpp:24: error: 'wxLocale' does not name a type
ui.cpp:46: error: variable or field 'HandleCtrlA' declared void
ui.cpp:46: error: 'wxKeyEvent' was not declared in this scope
ui.cpp:46: error: 'event' was not declared in this scope
ui.cpp: In function 'std::string DateStr(int64)':
ui.cpp:67: error: 'wxDateTime' was not declared in this scope
ui.cpp: In function 'std::string DateTimeStr(int64)':
ui.cpp:73: error: 'wxDateTime' was not declared in this scope
...

I have the following installed as I believe they are dependencies of bitcoin:

wxWidgets-2.9.2
openssl-1.0.0d
boost_1_47_0
db-5.1.19 (I have also tried with db-5.2.28)

The modified makefile I've been using is as follows:

Code:

DEPSDIR=/tmp/bitcoin/deps

INCLUDEPATHS= -I"$(DEPSDIR)/include"
LIBPATHS= -L"$(DEPSDIR)/lib"
WXLIBS=$(shell $(DEPSDIR)/bin/wx-config --libs --static)
WXBASELIBS=$(shell $(DEPSDIR)/bin/wx-config --libs base --static)

LIBS= -dead_strip \
 $(DEPSDIR)/lib/libdb_cxx-4.8.a \
 $(DEPSDIR)/lib/libboost_system.a \
 $(DEPSDIR)/lib/libboost_filesystem.a \
 $(DEPSDIR)/lib/libcrypto.a

WXDEFS=$(shell $(DEPSDIR)/bin/wx-config --cxxflags) -DNOPCH
DEBUGFLAGS=-g -DwxDEBUG_LEVEL=0
CFLAGS=-O2 -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(WXDEFS) $(INCLUDEPATHS)
HEADERS=headers.h strlcpy.h serialize.h uint256.h util.h key.h bignum.h base58.h script.h db.h net.h irc.h main.h rpc.h uibase.h ui.h init.h sha.h


OBJS= \
    obj/util.o \
    obj/script.o \
    obj/db.o \
    obj/net.o \
    obj/irc.o \
    obj/main.o \
    obj/rpc.o \
    obj/init.o \
    cryptopp/obj/sha.o \
    cryptopp/obj/cpu.o


all : bitcoin

obj/%.o : %.cpp
g++ $(CFLAGS) -c $<

cryptopp/obj/%.o: cryptopp/%.cpp
g++ $(CFLAGS) -c $<

bitcoin : $(OBJS) obj/ui.o obj/uibase.o
g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(WXLIBS) $(LIBS)

headers.h.gch : headers.h $(HEADERS)
g++ $(CFLAGS) -c $<

obj/nogui/%.o : %.cpp $(HEADERS)
g++ $(CFLAGS) -DwxUSE_GUI=0 -c $<

bitcoind : $(OBJS:obj/%=obj/nogui/%) obj/sha.o
g++ $(CFLAGS) -o $@ $(LIBPATHS) $^ $(WXBASELIBS) $(LIBS)

clean :
-rm -f bitcoin bitcoind
-rm -f obj/*
-rm -f obj/nogui/*
-rm -f headers.h.gch

As for specific questions to the community or any developer(s) that want to listen:

What should I do to make this work?
Or in the very least, what is the complete, specific list of dependencies that bitcoin-0.3.24 requires?
CERN
Newbie
*
Offline Offline

Activity: 24
Merit: 0


View Profile
July 19, 2011, 01:07:56 PM
 #2

It seems that your installation of Berkeley DB (berkdb, db, whatever you'd call it) is incomplete.

A proper installation of Berkeley DB should install db.h, which is depended on by db_cxx.h (which is also part of berkdb)

I'm guessing that the problem is that you're missing the /usr/include/db.h symlink

Do you have a /usr/include/dbX.X directory, where X.X is your version of berkdb?  Just "ln -s /usr/include/dbX.X/db.h /usr/include/db.h", and all is well Smiley
ioctlvoid (OP)
Newbie
*
Offline Offline

Activity: 10
Merit: 0


View Profile
July 19, 2011, 01:50:31 PM
 #3

It seems that your installation of Berkeley DB (berkdb, db, whatever you'd call it) is incomplete.

A proper installation of Berkeley DB should install db.h, which is depended on by db_cxx.h (which is also part of berkdb)

I'm guessing that the problem is that you're missing the /usr/include/db.h symlink

Do you have a /usr/include/dbX.X directory, where X.X is your version of berkdb?  Just "ln -s /usr/include/dbX.X/db.h /usr/include/db.h", and all is well Smiley

Thank you.

The program does still not compile, but at least I got a new error (a third variant):

Code:
g++ -c -O2 -Wno-invalid-offsetof -Wformat -g -D__WXDEBUG__ -DNOPCH -DFOURWAYSSE2 -DUSE_SSL -DUSE_UPNP=0 -I/usr/local/lib/wx/include/gtk2-unicode-2.9 -I/usr/local/include/wx-2.9 -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ -pthread -DGUI -o obj/util.o util.cpp
In file included from main.h:11,
                 from headers.h:96,
                 from util.cpp:4:
db.h: In member function 'bool CDB::Exists(const K&)':
db.h:149: error: 'class Db' has no member named 'exists'
make: *** [obj/util.o] Error 1

This is after having created the missing symlink as you mentioned.
CERN
Newbie
*
Offline Offline

Activity: 24
Merit: 0


View Profile
July 20, 2011, 01:03:12 AM
 #4

The problem this time looks to be that you're using a... err... some weird version of berkdb that doesn't have Db->exists() !

I recommend installing berkdb 4.7.25 -- that's the version the pre-compiled bitcoin client (mine anyway) seems to use  Smiley
ioctlvoid (OP)
Newbie
*
Offline Offline

Activity: 10
Merit: 0


View Profile
July 21, 2011, 03:36:49 PM
 #5

The problem this time looks to be that you're using a... err... some weird version of berkdb that doesn't have Db->exists() !

I recommend installing berkdb 4.7.25 -- that's the version the pre-compiled bitcoin client (mine anyway) seems to use  Smiley

Thanks, I'm starting to get very frustrated with this now, I still am not even close to get it working:

I have now removed my previous verison of berkdb (with "make uninstall") and installed berkdb 4.7.25 as you suggsted. This resulted in the following error:

Code:
net.cpp:22:32: error: miniupnpc/miniwget.h: No such file or directory
net.cpp:23:33: error: miniupnpc/miniupnpc.h: No such file or directory
net.cpp:24:36: error: miniupnpc/upnpcommands.h: No such file or directory
net.cpp:25:34: error: miniupnpc/upnperrors.h: No such file or directory
In file included from main.h:11,
                 from headers.h:96,
                 from script.cpp:4:
db.h: In member function 'bool CDB::Exists(const K&)':
db.h:149: error: 'class Db' has no member named 'exists'
In file included from main.h:11,
                 from headers.h:96,
                 from net.cpp:5:
CERN
Newbie
*
Offline Offline

Activity: 24
Merit: 0


View Profile
July 21, 2011, 05:38:03 PM
 #6

Hang in there, you're getting it!  :p

Code:
net.cpp:22:32: error: miniupnpc/miniwget.h: No such file or directory
net.cpp:23:33: error: miniupnpc/miniupnpc.h: No such file or directory
net.cpp:24:36: error: miniupnpc/upnpcommands.h: No such file or directory
net.cpp:25:34: error: miniupnpc/upnperrors.h: No such file or directory

These errors are caused by not having a package called miniupnpc installed...  Should be easy enough to fix, eh?  It's just for UPNP support, very handy

Code:
In file included from main.h:11,
                 from headers.h:96,
                 from script.cpp:4:
db.h: In member function 'bool CDB::Exists(const K&)':
db.h:149: error: 'class Db' has no member named 'exists'

And this...  I'd guess that it's because you installed that new version of berkdb!  Hey, I found out the issue with that btw...  Berkdb does not, by default, create /usr/include/db.h and /usr/include/db_cxx.h symlinks!  No idea why.  I guess they expect the vendors to deal with that, or for people to edit their makefiles to add -I/usr/include/dbX.X to their CFLAGS (but I can't in recent memory recall ever seeing it done that way)

Either way, just do:

rm /usr/include/db.h /usr/include/db_cxx.h
ln -s /usr/include/db4.7/db.h /usr/include/db.h
ln -s /usr/include/db4.7/db_cxx.h /usr/include/db_cxx.h

Hope you get a successful compile now...  If not, I'm always willing to help more  :p
ioctlvoid (OP)
Newbie
*
Offline Offline

Activity: 10
Merit: 0


View Profile
July 21, 2011, 10:20:50 PM
 #7

Hang in there, you're getting it!  :p

Code:
net.cpp:22:32: error: miniupnpc/miniwget.h: No such file or directory
net.cpp:23:33: error: miniupnpc/miniupnpc.h: No such file or directory
net.cpp:24:36: error: miniupnpc/upnpcommands.h: No such file or directory
net.cpp:25:34: error: miniupnpc/upnperrors.h: No such file or directory

These errors are caused by not having a package called miniupnpc installed...  Should be easy enough to fix, eh?  It's just for UPNP support, very handy

Code:
In file included from main.h:11,
                 from headers.h:96,
                 from script.cpp:4:
db.h: In member function 'bool CDB::Exists(const K&)':
db.h:149: error: 'class Db' has no member named 'exists'

And this...  I'd guess that it's because you installed that new version of berkdb!  Hey, I found out the issue with that btw...  Berkdb does not, by default, create /usr/include/db.h and /usr/include/db_cxx.h symlinks!  No idea why.  I guess they expect the vendors to deal with that, or for people to edit their makefiles to add -I/usr/include/dbX.X to their CFLAGS (but I can't in recent memory recall ever seeing it done that way)

Either way, just do:

rm /usr/include/db.h /usr/include/db_cxx.h
ln -s /usr/include/db4.7/db.h /usr/include/db.h
ln -s /usr/include/db4.7/db_cxx.h /usr/include/db_cxx.h

Hope you get a successful compile now...  If not, I'm always willing to help more  :p

Alright, thanks. I decided to just skip using miniupnpc -- I commented it out in the Makefile. I then proceeded to perform the commands you suggested. Although db4.7 seems to install by default under /usr/localBerkeley*, so my symlinks target that directory instead.

Now I get this error:

Code:
In file included from headers.h:43,
                 from util.cpp:4:
/usr/include/db_cxx.h:59:22: error: iostream.h: No such file or directory
/usr/include/db_cxx.h:60:23: error: exception.h: No such file or directory
In file included from headers.h:43,
                 from script.cpp:4:
/usr/include/db_cxx.h:59:22: error: iostream.h: No such file or directory
/usr/include/db_cxx.h:60:23: error: exception.h: No such file or directory
In file included from headers.h:43,
                 from db.cpp:5:
/usr/include/db_cxx.h:59:22: error: iostream.h: No such file or directory
/usr/include/db_cxx.h:60:23: error: exception.h: No such file or directory
In file included from headers.h:43,
                 from net.cpp:5:
...
cdnbcguy
Full Member
***
Offline Offline

Activity: 128
Merit: 100


View Profile WWW
July 30, 2011, 06:41:05 PM
 #8

I advise you to quit this wxwidget version and get the bitcoin-qt version

It compiled for me immediately after I followed the simple instructions.

Annona ad! Please keep in mind that there is nothing wrong with Bitcoin itself. All it's scandals are caused by wonky websites and sleazy people exploiting it. The light attracts bugs.

When all this bullshit drys up and blows away, Bitcoin will be stronger than ever.
JoelKatz
Legendary
*
Offline Offline

Activity: 1596
Merit: 1012


Democracy is vulnerable to a 51% attack.


View Profile WWW
August 01, 2011, 09:58:47 AM
 #9

Something went horribly wrong when Berkeley DB configured itself. It should have added this line to db_cxx.h:
#define   HAVE_CXX_STDHEADERS 1



I am an employee of Ripple. Follow me on Twitter @JoelKatz
1Joe1Katzci1rFcsr9HH7SLuHVnDy2aihZ BM-NBM3FRExVJSJJamV9ccgyWvQfratUHgN
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!