On 9/30/2014 11:04 AM, Koren Shoval wrote:
Hi,

i'm not sure if it's a libcurl issue, or my own lack of c++ expertise, but i thought i'd ask anyway....

I'm having some issues using libcurl when built with the winbuild makefiles

this is what i'm running

...\curl-7.38.0\winbuild>nmake /f Makefile.vc mode=static VC=12 WITH_DEVEL=..\external\x86\ WITH_SSL=static WITH_ZLIB=static WITH_SSH2=static ENABLE_SSPI=yes ENABLE_IPV6=no ENABLE_IDN=yes MACHINE=x86 DEBUG=yes

in ..\external\x86\

i've put all the dependencies

libeay32.lib
libssh2.lib
libssh2_a.lib
libssh2_a_debug.lib
libssh2_debug.lib
olber32_a.lib
olber32_a_debug.lib
oldap32_a.lib
oldap32_a_debug.lib
ssleay32.lib
zlib.pdb
zlib_a.lib

(downloaded based on the link in the BUILD.WINDOWS.txt instructions)

though it only uses zlib and ssh2 and i can see the link command is using the ssh2_a.lib and not the ssh2_a_debug.lib, also there's no zlib_a_debug available

the warning message during linking curl,

LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library


when i add the libcurl_a_debug.lib i've got and compiling my exec with /MTd
i get:

LNK2005: already defined in libcmtd.lib

and when i ignore /NODEFAULTLIB:libcmtd.lib

i get the error unresolved errors, (i guess it's needed)
for example:
error LNK2001: unresolved external symbol __CrtDbgReportW

i'm not a c++ expert, but it seems to me that the compiled lib is using the wrong dependencies (release instead of debug, for some of the libs) which might cause these issues...

BTW,

release mode, works without warnings and i'm able to compile my code when ignoring libcmt.lib

any ideas what i can do?


Visual Studio does not allow you to mix debuggable code and non-debuggable code, e.g. /MT and /MTd. The libraries you downloaded were compiled with /MT, so you cannot link against them if any of your code is compiled with /MTd. It may be possible now to compile and link when ignoring libcmt.lib, but you may find later on that other code requires it.

I finally downloaded the dependencies and created my own makefiles for them. Because I have my own build script and my own conventions (e.g. I use static linking for security and the library name is always the same regardless of compilation flags), they are not compatible with the shipped versions. I just have to live with that.

I don't have a better answer for you. I've been fighting this problem for years. This is the way Microsoft has chosen to do things. I could send you the makefiles I use for curl, zlib and ssh as examples, but you would be on your own after that.

--
    David Chapman      dcchap...@acm.org
    Chapman Consulting -- San Jose, CA
    Software Development Done Right.
    www.chapman-consulting-sj.com

-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to