Curl的curl_easy_perform函数在Debug正常,但在Release崩溃的解决方法

来源:互联网 发布:常用的网络协议有哪些 编辑:程序博客网 时间:2024/06/08 19:00

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


 

0 0
原创粉丝点击