编译C++程序链接libcURL时无库文件,求助解决
搞定MinGW下静态编译libcurl C++程序的问题
嘿,我来帮你解决这个问题!看你的错误信息,其实是两个独立的问题凑到一起了:C++标准库没链接上,以及缺少静态编译的libcurl库。咱们一步步来解决:
一、先搞定C++标准库的未定义引用
你现在用gcc命令编译C代码,这可不行——gcc是给C语言用的编译器,默认不会自动链接C标准库。赶紧换成g++命令,这样它会自动帮你把libstdc++库加上,那些std::__cxx11::basic_string相关的错误立马就没了。
二、自己编译静态版的libcurl库
你下载了源码是对的,但源码不会直接生成库文件,得自己编译出静态的libcurl.a。步骤如下:
- 解压你下载的libcurl源码包,进入源码根目录
- 打开MinGW自带的命令提示符(比如MinGW Command Prompt),cd到源码目录里
- 执行配置命令,告诉它咱们要编译静态库:
这里./configure --enable-static --disable-shared --prefix=C:/MinGW/curl-static--prefix是指定编译好的库和头文件要放的地方,你可以改成自己喜欢的路径,比如C:/my-curl也行 - 配置完之后,执行编译和安装:
等跑完之后,你去指定的make make installprefix路径下的lib文件夹里找,就能看到libcurl.a这个静态库文件了,include文件夹里是对应的头文件。
三、编译你的程序
现在用g++来编译,同时链接咱们刚编译好的静态libcurl,还要记得链接Windows系统里curl依赖的库(比如网络相关的ws2_32,还有ldap的wldap32)。假设你把curl安装到了C:/MinGW/curl-static,编译命令应该是这样:
g++ ./file.cpp -o ./test.exe -IC:/MinGW/curl-static/include -LC:/MinGW/curl-static/lib -lcurl -lws2_32 -lwldap32
给你解释下这些参数:
-I:告诉编译器去哪里找curl的头文件-L:告诉链接器去哪里找curl的静态库-lcurl:让链接器链接libcurl.a-lws2_32和-lwldap32:这俩是Windows系统库,curl依赖它们,必须加上,不然还会有未定义引用的错误
小提醒
看你的代码,geturl函数里的std::string out是传值的,你在函数里给out = ""根本不会改变外部的变量哦。如果想让函数把爬取到的内容返回给外部,要么把参数改成引用(std::string& out),要么直接返回gout就行,这样更合理。
内容的提问来源于stack exchange,提问作者dthusian
相关产品推荐
相关产品推荐

