为什么编译好的curl静态lib用不了?

昵称是神马 2012-12-11 01:06:11
为什么编译好的curl静态lib用不了?

Dll能用,静态lib可以编译生成,但是使用这个静态lib的时候,就会提示link2001未定义的外部符号,已经使用了#include "curl.h" #pragma comment(lib, "curl.lib") 路径是对的。求解~
...全文
1209 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyx-work 2012-12-16
  • 打赏
  • 举报
回复
CURL_STATICLIB 作用于 #if (defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)) && \ !defined(CURL_STATICLIB) #if defined(BUILDING_LIBCURL) #define CURL_EXTERN __declspec(dllexport) #else #define CURL_EXTERN __declspec(dllimport) #endif #else CURL_EXTERN 作用于 CURL_EXTERN CURL *curl_easy_init(void); 编译工程去除 lib libcurld.lib ws2_32.lib wldap32.lib 定义 CURL_STATICLIB 编译结果 curl_test.obj : error LNK2019: 无法解析的外部符号 _curl_easy_init,该符号在函数 _main 中被引用 不定义CURL_STATICLIB 编译结果 curl_test.obj : error LNK2019: 无法解析的外部符号 __imp__curl_easy_init,该符号在函数 _main 中被引用
昵称是神马 2012-12-15
  • 打赏
  • 举报
回复
什么条件下使用静态链接库需要在预处理器中加入_STATICLIB的声明呢?
hyx-work 2012-12-14
  • 打赏
  • 举报
回复
1 静态库路径设置正确 2 定义CURL_STSTICLIB 解决extern函数声明问题,否则是动态库函数名称 3 增加ws2_32.lib,wldap32.lib 解决tcp通信问题
昵称是神马 2012-12-14
  • 打赏
  • 举报
回复
引用 7 楼 handyhuang 的回复:
1 静态库路径设置正确 2 定义CURL_STSTICLIB 解决extern函数声明问题,否则是动态库函数名称 3 增加ws2_32.lib,wldap32.lib 解决tcp通信问题
为什定义CURL_STSTICLIB 解决extern函数声明问题,否则是动态库函数名称呢?
昵称是神马 2012-12-12
  • 打赏
  • 举报
回复
问题解决了~ When building an application that uses the static libcurl library, you must add -DCURL_STATICLIB to your CFLAGS. Otherwise the linker will look for dynamic import symbols. If you get linker error like "unknown symbol __imp__curl_easy_init ..." you have linked against the wrong (static) library. If you want to use the libcurl.dll and import lib, you don't need any extra CFLAGS, but use one of the import libraries below 在这里:http://curl.haxx.se/docs/faq.html#Link_errors_when_building_libcur 所以我们这样来改 菜单-->project -->settings-->C++选项卡的General里面的Project Option里面加上-DCURL_STATICLIB (其实就相当于在Preprocessor definitions里面加上CURL_STATICLIB一样) 确定-->rebuild all 又出错了: libcurl.lib(easy.obj) : error LNK2001: unresolved external symbol libcurl.lib(telnet.obj) : error LNK2001: unresolved external symbol libcurl.lib(easy.obj) : error LNK2001: unresolved external symbol ..... 这个一看就明白了马上加上: #pragma comment ( lib, "ws2_32.lib" ) #pragma comment ( lib, "wldap32.lib" ) 编译-->叮的一个美妙的声音想起了,哈哈,编译成功 网上找的答案,终于可行了~看来之前没设置CURL_STSTICLIB;库应该是根本没引入进来,谢谢大家。 试过dumpbin,但没看出什么来,不会用dumpbin。。。
赵4老师 2012-12-11
  • 打赏
  • 举报
回复
Linux:objdump Windows:dumpbin
昵称是神马 2012-12-11
  • 打赏
  • 举报
回复
引用 2 楼 zmlovelx 的回复:
objdump下, 看看这个静态lib是否编译进去了.
不会用objdump啊,我用的vs,求指导~
昵称是神马 2012-12-11
  • 打赏
  • 举报
回复
引用 1 楼 liulcsy 的回复:
引用 楼主 yujiefei0309 的回复:为什么编译好的curl静态lib用不了? Dll能用,静态lib可以编译生成,但是使用这个静态lib的时候,就会提示link2001未定义的外部符号,已经使用了#include "curl.h" #pragma comment(lib, "curl.lib") 路径是对的。求解~ 这个问题我刚遇到过。 你……
没懂啊。。。
帅得不敢出门 2012-12-11
  • 打赏
  • 举报
回复
objdump下, 看看这个静态lib是否编译进去了.
科比布莱恩特 2012-12-11
  • 打赏
  • 举报
回复
引用 楼主 yujiefei0309 的回复:
为什么编译好的curl静态lib用不了? Dll能用,静态lib可以编译生成,但是使用这个静态lib的时候,就会提示link2001未定义的外部符号,已经使用了#include "curl.h" #pragma comment(lib, "curl.lib") 路径是对的。求解~
这个问题我刚遇到过。 你把它curl.lib引到库里面,然后只包含头文件的上级目录,原目录需要是<curl/curl.h>

64,644

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧