【发布时间】:2014-08-12 11:14:34
【问题描述】:
我有一个使用多个共享库的程序。我可以在用于编译程序的机器上很好地编译和运行程序。当我尝试将可执行文件复制到另一台机器并在通过 apt-get 安装所需的包后运行它时,我收到以下错误:
“加载共享库时出错:libconfig++.so.8: 无法打开共享对象文件:没有这样的文件或目录”
运行$ locate libconfig++.so 后,我了解到我在当前系统上安装了 libconfig++.so.9,而不是 libconfig.so.8。
然后我手动将所有共享库与可执行文件一起复制到新系统,然后程序运行良好。我不认为这将是一个长期的解决方案,因为这些库不会像通常那样收到补丁和更新,从而产生潜在的安全风险。
有什么方法可以编译我的程序,使其依赖于 libconfig++.so 而不是 libconfig++.so.x,或者有什么方法可以让我手动包含特定的共享库,同时仍然可以更新它们?
我还考虑了这样一个事实,即我在分发程序的方式上做的事情完全错误。有没有办法以完全避免这种情况的方式分发我的程序?
【问题讨论】:
-
大多数 Linux 程序使用源代码重新分发,它们是作为安装过程的一部分进行编译的。你想要的是“linux binary redistribution”——只要在谷歌中输入这个并享受阅读——这是一个复杂的问题。
-
@Sathish:不不要那样做。版本控制方案的存在是有原因的,绕过它只是愚蠢的,因为您知道版本已更改,因为 ABI 已更改。
-
@Zachary:在目标机器上构建,或者类似的机器。
标签: c++ c shared-libraries dynamic-linking software-distribution