0

我们有一个使用旧库 libcurl.so.3 的项目和共享库 libprivate.so(私有所以)。系统使用新的系统库 libcurl.so.4 进行了升级。

对于一些内部问题,目前我们不想使用最新的库 libcurl.so.4,我们想使用 libcurl.so.3。

因此,我将 libcurl.so.3 复制到本地文件夹中,并据此设置 LD_LIBRARY_PATH。当我链接我的整个项目时,它说 libcurl.so.4 和 libcurl.so.3 之间存在版本冲突,需要 libprivate.so(libprivate.so 很久以前用 libcurl.3.so 编译过)。

我应该不担心这个警告并继续前进吗?

当我正确指定具有 libcurl.so.3 的 LD_LIBRARY_PATH 时,为什么它从系统目录 /usr/lib64/libcurl.so.4 中获取?当我执行 ldd my_binary 时,它取自 libcurl.so.4。我该如何阻止它?用特定位置指定 -L 也不起作用。修改 /etc/ld.conf 将适用于整个系统。当我运行我的项目时,我想这样做。

指定显式路径它的工作方式类似于 /home/mydir/libcurl.so.3,但我不想这样做。

我只想在执行项目时拥有这些条件。在其他情况下,它可以使用最新的库。

谢谢你的帮助

4

1 回答 1

1

如果您在评论中显示的命令是正确的:

gcc test.c -L~/lib/x86_64/ -lcurl -o test

...那么您需要在 and 之间留一个空格-L~/lib/x86_64/否则外壳不会扩展~,因此链接器没有在正确的目录中查找。

所以你需要:

gcc test.c -L ~/lib/x86_64/ -lcurl -o test

或者:

gcc test.c -L$HOME/lib/x86_64/ -lcurl -o test

(这里不需要空格,因为变量在单词的任何地方都可以扩展,但~仅在单词的开头扩展。)

于 2014-03-10T12:40:05.097 回答