我试图构建libcurl来静态链接最新版本到我的程序。输出文件夹包含构建文件。
但是当我构建并运行这段代码时:
// g++ gontest.cpp -o gontest -Ilibs/curl/gonout/include/curl -Llibs/curl/gonout/lib -lcurl
#include <curl/curl.h>
#include <iostream>
int main(int argc, char** argv)
{
auto data = curl_version_info(CURLVERSION_NOW);
std::cout << "curlversion: " << data->version << std::endl;
return 0;
}
...我得到的是curl库的系统版本(7.6.8),而不是构建版本(8.8.0)。
它的输出和我用这个构建的一样:
g++ gontest.cpp -o gontest -lcurl
我尝试了几个版本的命令,包括:
# none works
~$ g++ gontest.cpp -o gontest -Ilibs/curl/gonout/include/curl -Llibs/curl/gonout/lib -l:libs/curl/gonout/lib/libcurl.a
/usr/bin/ld: cannot find -l:libs/curl/gonout/lib/libcurl.a
collect2: error: ld returned 1 exit status
~$ g++ gontest.cpp -o gontest -Ilibs/curl/gonout/include/curl -Llibs/curl/gonout/lib -l:/libs/curl/gonout/lib/libcurl.a
~$ g++ gontest.cpp -o gontest -Ilibs/curl/gonout/include/curl -Llibs/curl/gonout/lib -l:./libs/curl/gonout/lib/libcurl.a
~$ g++ gontest.cpp -o gontest -Ilibs/curl/gonout/include/curl -Llibs/curl/gonout/lib -l:./libs/curl/gonout/lib/libcurl.so
~$ g++ gontest.cpp -o gontest -Ilibs/curl/gonout/include/curl -Llibs/curl/gonout/lib -l:/libs/curl/gonout/lib/libcurl.so
~$ g++ gontest.cpp -o gontest -Ilibs/curl/gonout/include/curl -Llibs/curl/gonout/lib -l:libs/curl/gonout/lib/libcurl.so
# note that it exists
~$ ls ./libs/curl/gonout/lib/libcurl.a
./libs/curl/gonout/lib/libcurl.a
为什么我的定制库被忽略了?
1条答案
按热度按时间lrl1mhuk1#
在构建.so之后,需要通过修改
LD_LIBRARY_PATH
将其链接到可执行文件,或者需要使用自定义的包含路径(使用标志-Wl,-rpath,<path to lib directory>
定义)来构建。在本例中,我们使用
-Wl,-rpath,.
,其中.
将当前目录添加到可用库位置列表中。请注意,这种方式在Linux上不是标准/正确的方式,通常情况下,我只是在给定的机器上升级curl。只是现在不行。拜托,不到万不得已别用。