在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*
这样的东西。
答案 0 :(得分:0)
在神奇的Linux世界中,很难在一台机器上编译和链接,然后将二进制文件复制到另一台机器并在那里运行。有很多变化,因为你也经历过并非所有的互相兼容,所以这使得二进制文件的移植非常困难,如果不是完全不可能的话。它可能适用于某些设置,而不适用于其他设置。现在你有两种可能性:
我认为,你的12.04是一个生产环境,所以你不能做你想做的任何事情......所以,在这种情况下,创建一个相同的(虚拟)机器来编译和链接它的Ubuntu 12.04。将可执行文件复制到您需要在其上运行的12.04。有可能它会毫无问题地工作。
如果关于生产环境的假设不正确,则安装编译器和必要的环境并在远程计算机上编译源代码。这样你就会知道它会在那台机器上一直有效。
答案 1 :(得分:0)
在您的12.04中找到libudev.so.0
所在的位置。然后使用libudev.so.1
创建指向该库的符号链接并查看。
制作符号链接:
ln -sf /opt/lib/libudev.so.1 /opt/lib/libudev.so.0