BitcoinTalk
Issues building bitcoin on Windows 7

View Satoshi only

External link

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:

Code:
1>------ Build started: Project: bitcoin_test, Configuration: Debug Win32 ------
1>Build started 9/14/2010 08:07:14.
1>InitializeBuildStatus:
1>  Touching "Debugitcoin_test.unsuccessfulbuild".
1>ClCompile:
1>  util.cpp
1>c:\users\[myusername]\desktopitcoin-0.3.12\src\db.h(15): error C2143: syntax error : missing ';' before '<'
1>c:\users\[myusername]\desktopitcoin-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]\desktopitcoin-0.3.12\src\db.h(16): error C2146: syntax error : missing ';' before identifier 'cs_mapAddressBook'
1>c:\users\[myusername]\desktopitcoin-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]\desktopitcoin-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]\desktopitcoin-0.3.12\src\db.h(17): error C2143: syntax error : missing ';' before '<'
1>c:\users\[myusername]\desktopitcoin-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]\desktopitcoin-0.3.12\src\db.h(23): error C2146: syntax error : missing ';' before identifier 'dbenv'
1>c:\users\[myusername]\desktopitcoin-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]\desktopitcoin-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]\desktopitcoin-0.3.12\src\db.h(34): error C2143: syntax error : missing ';' before '*'
1>c:\users\[myusername]\desktopitcoin-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]\desktopitcoin-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]\desktopitcoin-0.3.12\src\db.h(35): error C2146: syntax error : missing ';' before identifier 'strFile'
1>c:\users\[myusername]\desktopitcoin-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]\desktopitcoin-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]\desktopitcoin-0.3.12\src\db.h(36): error C2143: syntax error : missing ';' before '<'
1>c:\users\[myusername]\desktopitcoin-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]\desktopitcoin-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 <iostream> 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.
You should build using the nmake command from the visual studio command prompt as described in the information distributed with the source.
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?
Ok...so trying to build from the commandline with nmake is still giving me the same problems:


Code:
c:\Users\[myusername]\Desktopitcoin-0.3.12\src>nmake /f makefile.vc

Microsoft (R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

        cl /c /nologo /MDd /EHsc /GR /Zm300 /Zi /D__WXDEBUG__ /DWIN32 /D__WXMSW__ /D_WINDOWS /DNOPCH /I"/boost"  /I"/db/build_windows"
 /I"/openssl/include"  /I"/wxwidgets/lib/vc_lib/mswud"  /I"/wxwidgets/include" /DGUI /Foobj\util.obj util.cpp
util.cpp
c:\users\[myusername]\desktopitcoin-0.3.12\src\db.h(15) : error C2143: syntax error : missing ';' before '<'
c:\users\[myusername]\desktopitcoin-0.3.12\src\db.h(15) : error C4430: missing type specifier - int assumed. Note: C++ does not support defau
lt-int
c:\users\[myusername]\desktopitcoin-0.3.12\src\db.h(16) : error C2146: syntax error : missing ';' before identifier 'cs_mapAddressBook'
c:\users\[myusername]\desktopitcoin-0.3.12\src\db.h(16) : error C4430: missing type specifier - int assumed. Note: C++ does not support defau
lt-int
c:\users\[myusername]\desktopitcoin-0.3.12\src\db.h(16) : error C4430: missing type specifier - int assumed. Note: C++ does not support defau
lt-int
c:\users\[myusername]\desktopitcoin-0.3.12\src\db.h(17) : error C2143: syntax error : missing ';' before '<'
c:\users\[myusername]\desktopitcoin-0.3.12\src\db.h(17) : error C4430: missing type specifier - int assumed. Note: C++ does not support defau
lt-int
c:\users\[myusername]\desktopitcoin-0.3.12\src\db.h(23) : error C2146: syntax error : missing ';' before identifier 'dbenv'
c:\users\[myusername]\desktopitcoin-0.3.12\src\db.h(23) : error C4430: missing type specifier - int assumed. Note: C++ does not support defau
lt-int


Any additional advice would be appreciated...  Undecided


I think that the C4430 error can be ignored by adding a #pragma warning(disable:4430) to headers.h, but the other ones appear to be more serious

It looks like the C2143 is sometimes caused by problems with #includes, but since I am just using the files that were distributed with the source...I would assume all are functional? Maybe it is something about using vs2010 that is causing the problems?
The lines it's tripping on:
Code:
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.