2014年3月7日星期五
Curl的curl_easy_perform函数在Debug正常,但在Release崩溃的解决方法
(1) 在VS2008的Release编译时,会出现很多个这样的警告:
warningLNK4099: PDB 'vc100.pdb' was not found with '../lib\libcurl.lib'
注意:在Release崩溃的时候,有可能会因为这些警告而产生,所以提高警告级别,在属性里面。这是防止Release崩溃的一个方法之一。
(我没有来得及去除这些警告)
(2) 在Release版本的预编译里,预定义为以下2个
WIN32
NDEBUG
在VS2008和VS2010属性里面设置:
加入的LIB:
libcurl.lib
Ws2_32.lib
Wldap32.lib
Advapi32.lib
libcurl_imp.lib
[libcurl_imp.lib必须在Release里面增加,否则在执行curl的时候会崩溃!在Debug可以不要]
按照以上设置,libcurl_imp.lib没有也可能导致VS2008编译不过去。
以上是VS2010和VS2008,特别说明,
以上VS2008和VS2010编译的curl连接下载文件测试成功,
特别是Release.
总结:
Release版本需要libcurl_imp.lib库
预定义的时候,只需要WIN32,NDEBUG
测试成功,如果问题还存在,请可以参考以下的
//
以下是VS2010的设置
C++ Command lines
/I"include"/Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D"NDEBUG" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc/MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h"/Fp"Release\curllib_app2010.pch" /Fa"Release\"/Fo"Release\" /Fd"Release\vc100.pdb" /Gd /analyze-/errorReport:queue
Link Command lines
/OUT:"E:******\Release\curllib_app2010.exe"/INCREMENTAL:NO /NOLOGO /LIBPATH:"../lib" "libcurl.lib""Ws2_32.lib" "Wldap32.lib" "Advapi32.lib""libcurl_imp.lib" "kernel32.lib" "user32.lib""gdi32.lib" "winspool.lib" "comdlg32.lib""advapi32.lib" "shell32.lib" "ole32.lib""oleaut32.lib" "uuid.lib" "odbc32.lib""odbccp32.lib" /MANIFEST /ManifestFile:"Release\curllib_app2010.exe.intermediate.manifest"/ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'"/DEBUG /PDB:"E:*****\Release\curllib_app2010.pdb" /SUBSYSTEM:CONSOLE/OPT:REF /OPT:ICF /PGD:"E:***\Release\curllib_app2010.pgd" /LTCG/TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE
以下是VS2008的设置
C++ Command line
/Ox/Oi /I "../include" /D "WIN32" /D "NDEBUG" /D"_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy/Yu"stdafx.h" /Fp"Release\curllib_app2008.pch"/Fo"Release\\" /Fd"Release\vc90.pdb" /W3 /nologo /c /Zi /TP/errorReport:prompt
Link Command line
/OUT:"E:***\Release\curllib_app2008.exe"/INCREMENTAL:NO /NOLOGO /LIBPATH:"../lib" /MANIFEST/MANIFESTFILE:"Release\curllib_app2008.exe.intermediate.manifest"/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"*****\Release\curllib_app2008.pdb"/SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /DYNAMICBASE /NXCOMPAT /MACHINE:X86/ERRORREPORT:PROMPT libcurl.lib Ws2_32.lib Wldap32.lib Advapi32.liblibcurl_imp.lib kernel32.lib user32.libgdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.liboleaut32.lib uuid.lib odbc32.lib odbccp32.lib
以上问题害的我找了整整2个小时!!!总算解决了!
完 3/7/2014 10:52:32 AM
如果是LIB库,需要做成如下,尤其去掉clr,
libcurl_imp.lib不需要,否者会出现编译警告
Yes (/NODEFAULTLIB)
/Ox /Oi /I "../include" /D "WIN32" /D "NDEBUG" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MDd /Gy /Yu"stdafx.h" /Fp"Release\lib_download.pch" /Fo"Release\\" /Fd"Release\vc90.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt