Issues building bitcoin on Windows 7

7 messages BitcoinTalk LobsterMan, Gespenster, nelisky, Satoshi Nakamoto, dkaparis September 14, 2010 — September 30, 2010
LobsterMan September 14, 2010 12:14 UTC Source ·

I’ve been playing around with visual studio (2010) trying to build bitcoin from the source that is included in the win32 zip archive. I created a new makefile project and imported the makefile, acquired the boost, wxwidgets, and the openssl sources, and a few other files which were reported missing when I would try to build. I got as far as the build log reporting that it needed iostream.h, so I went and found a copy of that from libstdc++. Now, after trying to build with iostream.h located in my includes directory, I am getting loads of errors that look like this:

1>------ Build started: Project: bitcoin_test, Configuration: Debug Win32 ------
1>Build started 9/14/2010 08:07:14.
1>InitializeBuildStatus:
1>  Touching "Debug\bitcoin_test.unsuccessfulbuild".
1>ClCompile:
1>  util.cpp
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(15): error C2143: syntax error : missing ';' before '<'
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(15): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(16): error C2146: syntax error : missing ';' before identifier 'cs_mapAddressBook'
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(16): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(16): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(17): error C2143: syntax error : missing ';' before '<'
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(17): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(23): error C2146: syntax error : missing ';' before identifier 'dbenv'
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(34): error C2143: syntax error : missing ';' before '*'
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(34): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(34): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(35): error C2146: syntax error : missing ';' before identifier 'strFile'
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(35): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(35): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(36): error C2143: syntax error : missing ';' before '<'
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(36): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\[myusername]\desktop\bitcoin-0.3.12\src\db.h(36): error C2238: unexpected token(s) preceding ';'

This has happened with 2 different versions of iostream.h (tried changing <iostream.h> to in db.h also), and if I remove iostream.h from my includes directory it simply reports that file is missing and doesn’t give hundreds of lines of errors like the above. I haven’t modified any files at all, I am just trying to get the project to build in a windows environment right now…

I am sort of stuck here and haven’t been able to figure out what the problem is. Admittedly I don’t entirely know what I’m doing (I don’t have a whole lot of experience with C++ in windows), but I was wondering if anyone has any ideas what my problem might be.

Gespenster September 14, 2010 18:58 UTC Source ·

You should build using the nmake command from the visual studio command prompt as described in the information distributed with the source.

nelisky September 14, 2010 19:28 UTC Source ·
Quote from: Gespenster on September 14, 2010, 9:58:07 AM UTC

You should build using the nmake command from the visual studio command prompt as described in the information distributed with the source.

There’s a makefile.mingw, and although I haven’t tried yet, I’ll probably take a stab at windows building for my cuda miner. Can I not use this?

Satoshi Nakamoto September 19, 2010 18:46 UTC Source ·

The lines it’s tripping on:

ERROR extern map<string, string> mapAddressBook;
ERROR extern CCriticalSection cs_mapAddressBook;
ERROR extern vector<unsigned char> vchDefaultKey;
OK extern bool fClient;
OK extern int nBestHeight;

OK extern unsigned int nWalletDBUpdated;
ERROR extern DbEnv dbenv;

So it’s acting like nothing is defined, not even map and vector.

Yet, db.h is included by headers.h (and only there, nowhere else) which includes vector, map, util.h and everything before db.h.

Is VC trying to use precompiled headers and screwing it up?  Could there be some leftover precompiled header files in your directory from previously failed attempts that it’s finding and using?

There’s an installer package now that makes it really easy to install MinGW.  Don’t use the latest version 4.5.0, use a few versions back like 4.4.1 (1.908.0) or 1.812.0.  A setup program completely installs everything, it’s not hard like it used to be.  I think the only thing I had to do was rename make*.exe something to make.exe. http://tdm-gcc.tdragon.net/

Off topic, but: It would be nice if someone would hack on getting tcatm’s 4-way 128-bit SSE2 code working on Windows.  There’s something with MinGW’s optimisation, I’m not sure but maybe a problem with 16-byte alignment on the stack, that makes it segfault.  With some fiddling, I was able to get his code to work in a test program, but not in Bitcoin itself for some reason.

LobsterMan September 22, 2010 00:07 UTC Source ·

I’ve given up for the time being with VC and have been having a bit more success with MinGW, I will report back if I decide to give VC a try in the future

dkaparis September 24, 2010 11:05 UTC Source ·

My CMake version at http://bitbucket.org/dkaparis/bitcoin-cmake/ can build on windows using MSVC, both IDE project and command line nmake. You’ll only need CMake.

LobsterMan September 30, 2010 05:11 UTC Source ·

(still given up with MSVC++ for now, just reformatted and don’t want to go bloating up my system with visual studio and friends for now…) This is my attempt to build the source that puddinpop has released… bitcoin-CUDA-svn153-src-gpl

I’ve made some changes to the makefile to reflect the version of boost that i’m using (1.44) and mingw 4.5 and also to support not-absolute-paths; here is what I’m working with at present:

# Copyright (c) 2009-2010 Satoshi Nakamoto
# Distributed under the MIT/X11 software license, see the accompanying
# file license.txt or http://www.opensource.org/licenses/mit-license.php.

INCLUDEPATHS=
-I”./boost”
-I”./db/build_unix”
-I”./openssl/include”
-I”./wxwidgets/lib/gcc_lib/mswud”
-I”./wxwidgets/include”

LIBPATHS=
-L”./boost/stage/lib”
-L”./db/build_unix”
-L”./openssl/out”
-L”./wxwidgets/lib/gcc_lib”

WXLIBS=
-l wxmsw29ud_html -l wxmsw29ud_core -l wxmsw29ud_adv -l wxbase29ud -l wxtiffd -l wxjpegd -l wxpngd -l wxzlibd

LIBS=
-l libboost_system-mgw45-mt-d-1_44
-l libboost_filesystem-mgw45-mt-d-1_44
-l libboost_program_options-mgw45-mt-d-1_44
-l libboost_thread-mgw45-mt-d-1_44
-l db_cxx
-l eay32
-l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l shell32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l shlwapi

DEFS=-DWIN32 -D__WXMSW__ -D_WINDOWS -DNOPCH DEBUGFLAGS=-g -D__WXDEBUG__ CFLAGS=-mthreads -O2 -w -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(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 noui.h init.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.exe

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

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

obj/ui_res.o: ui.rc rc/bitcoin.ico rc/check.ico rc/send16.bmp rc/send16mask.bmp rc/send16masknoshadow.bmp rc/send20.bmp rc/send20mask.bmp rc/addressbook16.bmp rc/addressbook16mask.bmp rc/addressbook20.bmp rc/addressbook20mask.bmp windres $(DEFS) $(INCLUDEPATHS) -o $@ -i $<

bitcoin.exe: $(OBJS) obj/ui.o obj/uibase.o obj/ui_res.o g++ $(CFLAGS) -mwindows -Wl,—subsystem,windows -o $@ $(LIBPATHS) $^ $(WXLIBS) $(LIBS)

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

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

clean: -del /Q obj* -del /Q obj\nogui* -del /Q cryptopp\obj* -del /Q headers.h.gch

So far, calling both ‘mingw32-make -f makefile.mingw bitcoind.exe’ from cmd.exe or ‘make -f makefile.mingw bitcoind.exe’ from the MinGW shell are giving me the same problems. It gets as far as the boost_program_options, and then exits with the following errors:

C:\Users\[username]\Desktop\bitcoin-CUDA-svn153-src-gpl/./boost/boost/program_options/eof_iterator.hpp:75: undefined reference to `boost::program_options::detail::common_config_file_iterator::get()'
obj/nogui/util.o: In function `basic_config_file_iterator':
C:\Users\[username]\Desktop\bitcoin-CUDA-svn153-src-gpl/./boost/boost/program_options/detail/config_file.hpp:147: undefined reference to `boost::program_options::detail::common_config_file_iterator::common_config_file_iterator(std::set<std::string, std::less<std::string>, std::allocator<std::string> > const&, bool)'
C:\Users\[username]\Desktop\bitcoin-CUDA-svn153-src-gpl/./boost/boost/program_options/detail/config_file.hpp:150: undefined reference to `boost::program_options::detail::common_config_file_iterator::get()'
collect2: ld returned 1 exit status
mingw32-make: *** [bitcoind.exe] Error 1
Kind of stuck here at the moment and any help would be appreciated (is it possible something failed when I was building boost?)  😊