#272: Build errors on Windows -------------------------+-------------------- Reporter: kdekker | Owner: Type: defect | Status: new Priority: normal | Milestone: 1.4.3 Component: misc | Version: 1.4.2 Keywords: build error | Blocked By: Blocks: | -------------------------+-------------------- 1. Visual Studio 2010 SP1 complains about /Og (on both 32-bit and 64-bit build) when building libssh2 version 1.4.3.
The errors happen during: a. during compilation: cl -c /nologo /GL /Zi /EHsc /Og /Oi /O2 /Oy /GF /Y- /MD /DNDEBUG /Iwin32 /Iinclude /IW:\common\thirdparty\OpenSSL\build\Windows\Win32\include -DLIBSSH2_HAVE_ZLIB=1 /IW:\common\thirdparty\zlib\build\Windows\Win32\..\include -DLIBSSH2_WIN32 /Fo"Release\src\\" src\channel.c src\comp.c src\crypt.c src\hostkey.c src\kex.c src\mac.c src\misc.c src\packet.c src\publickey.c src\scp.c src\session.c src\sftp.c src\userauth.c src\transport.c src\version.c src\knownhost.c src\agent.c src\openssl.c src\libgcrypt.c src\pem.c src\keepalive.c src\global.c 1>cl : Command line warning D9035: option 'Og' has been deprecated and will be removed in a future release b. during link: 1> cl -o libssh2.dll /nologo /GL /Zi /EHsc /Og /Oi /O2 /Oy /GF /Y- /MD /DNDEBUG /Iwin32 /Iinclude /IW:\common\thirdparty\OpenSSL\build\Windows\Win32\include -DLIBSSH2_HAVE_ZLIB=1 /IW:\common\thirdparty\zlib\build\Windows\Win32\..\include -DLIBSSH2_WIN32 /DEBUG /LD Release\src\channel.obj Release\src\comp.obj Release\src\crypt.obj Release\src\hostkey.obj Release\src\kex.obj Release\src\mac.obj Release\src\misc.obj Release\src\packet.obj Release\src\publickey.obj Release\src\scp.obj Release\src\session.obj Release\src\sftp.obj Release\src\userauth.obj Release\src\transport.obj Release\src\version.obj Release\src\knownhost.obj Release\src\agent.obj Release\src\openssl.obj Release\src\libgcrypt.obj Release\src\pem.obj Release\src\keepalive.obj Release\src\global.obj Release\src\libssh2.res W:\common\thirdparty\OpenSSL\build\Windows\Win32\lib\libeay32.lib W:\common\thirdparty\OpenSSL\build\Windows\Win32\lib\ssleay32.lib ws2_32.lib user32.lib W:\common\thirdparty\zlib\build\Windows\Win32\lib\zlib.lib 1>cl : Command line warning D9035: option 'o' has been deprecated and will be removed in a future release 1>cl : Command line warning D9035: option 'Og' has been deprecated and will be removed in a future release 1> Creating library libssh2.lib and object libssh2.exp 2. Link errors: 1>libeay32.lib(cryptlib.obj) : error LNK2001: unresolved external symbol __imp__DeregisterEventSource@4 1>libeay32.lib(cryptlib.obj) : error LNK2001: unresolved external symbol __imp__ReportEventA@36 1>libeay32.lib(cryptlib.obj) : error LNK2001: unresolved external symbol __imp__RegisterEventSourceA@8 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__DeleteDC@4 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__DeleteObject@4 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__GetBitmapBits@12 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__BitBlt@36 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__GetObjectA@12 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__SelectObject@8 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__CreateCompatibleBitmap@12 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__GetDeviceCaps@8 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__CreateCompatibleDC@4 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__CreateDCA@16 1>libssh2.dll : fatal error LNK1120: 13 unresolved externals 1>NMAKE : fatal error U1077: '"c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cl.EXE"' : return code '0x2' To address these issues, I propose a change on config.mk, see attached file. I also made some makefile variables configurable by setting environment variables (to find e.g. OpenSSL and zlib directories). You also cannot rely on default libraries, so I had to add advapi32 and gdi32 libraries to get the libssh2 DLL linking. 3. static libssh2.lib could not be build. I added a static library target to src\NMakfile. Affected changed files are attached. Diff (in diff format) is shown below. diff src\NMakefile.org src\NMakefile 6a7,9 > AR = lib > ARFLAGS = -nologo /LTCG > 8d10 < 9a12 > STATICLIB=$(INTDIR)\libssh2.lib 10a14 > !if "$(BUILD_STATIC_LIB)" == "" 11a16,18 > !else > all: $(STATICLIB) > !endif 15a23,25 > $(STATICLIB): $(OBJECTS) > $(AR) $(ARFLAGS) -out:$@ $(OBJECTS) > diff win32\config.mk.org win32\config.mk 2a3 > !if "$(OPENSSLINC)" == "" 3a5,7 > !endif > > !if "$(OPENSSLLIB)" == "" 5c9,11 < --- > !endif > > !if "$(ZLIBINC)" == "" 6a13,15 > !endif > > !if "$(ZLIBLIB)" == "" 7a17 > !endif 18c28 < CPPFLAGS=/Og /Oi /O2 /Oy /GF /Y- /MD /DNDEBUG --- > CPPFLAGS=/Oi /O2 /Oy /GF /Y- /MD /DNDEBUG 22c32 < CPPFLAGS=/nologo /GL /Zi /EHsc $(CPPFLAGS) /Iwin32 /Iinclude /I$(OPENSSLINC) $(ZLIBINC) -DLIBSSH2_WIN32 --- > CPPFLAGS=/nologo /GL /Zi /EHsc $(CPPFLAGS) /Iwin32 /Iinclude /I$(OPENSSLINC) $(ZLIBINC) 26c36 < LIBS=$(OPENSSLLIB)\libeay32.lib $(OPENSSLLIB)\ssleay32.lib ws2_32.lib user32.lib $(ZLIBLIB)\zlib.lib --- > LIBS=$(OPENSSLLIB)\libeay32.lib $(OPENSSLLIB)\ssleay32.lib $(ZLIBLIB)\zlib.lib ws2_32.lib user32.lib advapi32.lib gdi32.lib -- Ticket URL: <https://trac.libssh2.org/ticket/272> libssh2 <https://trac.libssh2.org/> C library for writing portable SSH2 clients _______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel