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

标签 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 提供参数 -ludev

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

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

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

最佳答案

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

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

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

关于c++ - Linux 链接到任何可用的库版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20681004/

相关文章:

c++ - 确保字符串仅包含字母数字字符的更好方法?

在 Windows XP 中编译 C 代码

c - 用于文件传输的多个套接字连接

c# - Mono 是否支持 System.Drawing 和 System.Drawing.Printing?

c++ - 为什么使用 std::bind 出现参数错误

c++ - Ogre3d/通过合成器监听器访问传递并传递标识符

c# - Windows 应用程序和 Spy++

将系统命令的内容读取到R中的数据帧

c - libcurl 出现编译错误

c++ - 仅当当前行溢出 clang 格式时才在新行上加括号