静态库链接但仍未定义引用
Static Library linked but still undefined references
我正在尝试将libcurl静态链接到我的程序(只是libcurl,而不是它的所有依赖项)。我自己构建libcurl是为了将依赖关系降到最低,无论如何,大多数linux系统都应该存在这种依赖关系。
我尝试使用进行编译
g++ foo.cpp -I/tmp/curl/include/curl/ -L/tmp/curl/lib/libcurl.a
但仍然得到
curl_downloads.cpp:(.text+0xe): undefined reference to `curl_global_init'
/tmp/ccY0XMUo.o: In function `curlDownloadToFile(void*, std::string const&, std::string const&, std::string const&, std::string)':
curl_downloads.cpp:(.text+0x36): undefined reference to `curl_easy_init'
curl_downloads.cpp:(.text+0xcb): undefined reference to `curl_easy_escape'
curl_downloads.cpp:(.text+0x119): undefined reference to `curl_easy_setopt'
curl_downloads.cpp:(.text+0x15d): undefined reference to `curl_easy_setopt'
curl_downloads.cpp:(.text+0x178): undefined reference to `curl_easy_setopt'
curl_downloads.cpp:(.text+0x192): undefined reference to `curl_easy_setopt'
...
但nm libcurl.a显示
nm libcurl.a | grep easy
U curl_easy_unescape
0000000000000000 T curl_easy_escape
00000000000002f0 T curl_easy_unescape
libcurl_la-easy.o:
0000000000000590 T curl_easy_cleanup
0000000000000630 T curl_easy_duphandle
00000000000005f0 T curl_easy_getinfo
0000000000000270 T curl_easy_init
00000000000008e0 T curl_easy_pause
0000000000000350 T curl_easy_perform
0000000000000a60 T curl_easy_recv
0000000000000800 T curl_easy_reset
0000000000000ad0 T curl_easy_send
00000000000002b0 T curl_easy_setopt
0000000000000080 t easy_connection
0000000000001580 T Curl_multi_set_easy_connection
U curl_easy_init
0000000000000000 T curl_easy_strerror
因此功能应该存在。我还试着像g++调用中的每个可能的参数顺序一样,总是得到缺失的引用。
那么我在这里错过了什么?
g++foo.cpp-I/tmp/curl/include/curl/-L/tmp/curl/lib/libcurl.a
存档(*.a
)文件只是对象文件(*.o
)的集合。因此,您可以像指定对象文件一样指定归档文件。
在您的情况下,删除-L
(-L
是一个路径,而不是库包含开关),并指定归档的完全限定路径:
g++ foo.cpp -I/tmp/curl/include/curl/ -o foo.exe /tmp/curl/lib/libcurl.a
相关文章:
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用