Linux链接到任何可用的库版本

时间:2013-12-19 11:49:47

标签: c++ c linux node.js ubuntu

在Ubuntu 13.10上编译我的二进制文件(node.js的插件)。然后链接器将libudev.so.1链接起来。

然后我将二进制文件复制到Ubuntu 12.04机器并运行二进制文件。然后有一个错误,无法找到libudev.so.1。在Ubuntu 12.04上安装了libudev.so.0。

我为gcc提供了param -ludev

二进制文件需要libudev.so.1。我用这个命令检查了它:

$> strings bin | grep udev
$> ...
$> libudev.so.1

如何告诉链接器它应该采用任何提供的libudev版本的操作系统。所以二进制文件需要像libudev.so*这样的东西。

2 个答案:

答案 0 :(得分:0)

在神奇的Linux世界中,很难在一台机器上编译和链接,然后将二进制文件复制到另一台机器并在那里运行。有很多变化,因为你也经历过并非所有的互相兼容,所以这使得二进制文件的移植非常困难,如果不是完全不可能的话。它可能适用于某些设置,而不适用于其他设置。现在你有两种可能性:

  1. 我认为,你的12.04是一个生产环境,所以你不能做你想做的任何事情......所以,在这种情况下,创建一个相同的(虚拟)机器来编译和链接它的Ubuntu 12.04。将可执行文件复制到您需要在其上运行的12.04。有可能它会毫无问题地工作。

  2. 如果关于生产环境的假设不正确,则安装编译器和必要的环境并在远程计算机上编译源代码。这样你就会知道它会在那台机器上一直有效。

答案 1 :(得分:0)

在您的12.04中找到libudev.so.0所在的位置。然后使用libudev.so.1创建指向该库的符号链接并查看。

制作符号链接:

ln -sf /opt/lib/libudev.so.1   /opt/lib/libudev.so.0