【发布时间】:2014-01-09 10:19:51
【问题描述】:
我正在我的电脑上构建我的程序,libtiff.so -> libtiff.so.5。
然后在 libtiff.so -> libtiff.so.4 所在的另一台机器上推送构建。
在运行时,我的程序存在:«加载共享库时出错:libtiff.so.5:无法打开共享对象文件:没有这样的文件或目录»。
我无法升级另一台机器,我想避免在虚拟机上编译(与执行机器具有相同的 linux 版本)。因此,我想强制编译器使用libtiff.so.4 而不是libtiff.so.5。
我的计算机上安装了libtiff.so.4(以及libtiff.so.5)。如何强制与此版本而不是较新版本的链接。我考虑过移动libtiff.so -> libtiff.so.4,但如果它需要最新版本,我担心会破坏我的系统(apt-get purge libtiff5 会出错,因为其他一些软件包需要它)。
是否可以链接到旧(已安装)版本的库?如果是,如何?
将libtiff.so 的符号链接更改为旧版本是否有害?如果没有,它会解决我的问题吗?
【问题讨论】:
-
也许可以使用LD_PRELOAD。
-
链接时使用 .so.4 的完整路径而不是通常的
-ltiff怎么样? (您需要针对与 libtiff4 兼容的头文件进行编译)。 -
编译器无法找到共享库的位置。我猜你也需要通过 PATH。
-
另一种方式:
mkdir /tmp/lib; ln -s /usr/lib/libtiff.so.4 /tmp/lib/libtiff.so; ld -L /tmp/lib ....
标签: c++ c linux shared-libraries