linux GCC不会使用自建的libcurl?

dced5bon  于 2023-05-16  发布在  Linux
关注(0)|答案(1)|浏览(179)

我试图构建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

为什么我的定制库被忽略了?

lrl1mhuk

lrl1mhuk1#

在构建.so之后,需要通过修改LD_LIBRARY_PATH将其链接到可执行文件,或者需要使用自定义的包含路径(使用标志-Wl,-rpath,<path to lib directory>定义)来构建。

在本例中,我们使用-Wl,-rpath,.,其中.将当前目录添加到可用库位置列表中。
请注意,这种方式在Linux上不是标准/正确的方式,通常情况下,我只是在给定的机器上升级curl。只是现在不行。拜托,不到万不得已别用。

相关问题