如何利用旧的系统库

时间:2014-03-10 11:58:07

标签: gcc curl linker shared-libraries libssl

我们有一个项目和共享库libprivate.so(私有),它使用旧库libcurl.so.3。使用新的系统库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,但我不想这样做。

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

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

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

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

...那么你需要-L~/lib/x86_64/之间的空格,否则shell不会扩展~,因此链接器不会查找正确的目录。

所以你需要:

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

或:

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

(此处不需要空格,因为变量会在单词的任何位置展开,但~只会在单词的开头展开。)