为什么编译好的libcurl静态lib用不了?
清泛原创
编译Dll能用,但如上图编译静态成静态lib,使用这个静态lib的时候,就会提示link2001未定义的外部符号,头文件、lib文件均已正常导入。
解决方法:
请参考:http://curl.haxx.se/docs/faq.html#Link_errors_when_building_libcur
在需要调用静态lib的工程(非libcurl源代码工程)预编译器中添加 CURL_STATICLIB ,即可解决。
原因解析:
curl.h中部分代码
#ifdef CURL_STATICLIB
# define CURL_EXTERN
#elif defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)
# if defined(BUILDING_LIBCURL)
# define CURL_EXTERN __declspec(dllexport)
# else
# define CURL_EXTERN __declspec(dllimport)
# endif
#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS)
# define CURL_EXTERN CURL_EXTERN_SYMBOL
#else
# define CURL_EXTERN
#endif
没有定义CURL_STATICLIB的话,默认使用的是__declspec(dllimport),但是这是针对动态lib的,而静态lib无需任何申明。