使用c ++可执行文件的不同Linux发行版的问题

sag*_*gie 2 c++ merge shared-libraries linux-distro

我有一个在我的linux机器上运行完美的c ++代码(Ubuntu Karmic).当我尝试在另一个版本上运行它时,我丢失了所有类型的共享库.

有没有办法将所有共享库合并为单个可执行文件?

编辑:我想我问的是错误的问题.我应该要求一种方法来静态链接我的可执行文件已经构建.我找到了statifier的答案

Ale*_*own 6

共享库丢失的原因有三个:

  • 您正在使用默认情况下在另一个发行版上不存在的共享库,或者您已在主机上安装它们,而不是在另一个上安装它们,例如libDBI.so
  • 你在链接时过度指定了版本,例如libz.so.1.2.3,另一台机器有API兼容(主要版本1)但是不同的次要版本2.3,如果它只链接它可能适用于你的程序
  • 该库的主要版本已经改变,这意味着它是不兼容libc.so.2VS libc.so.1.

修复方法是:

  • 不要将不需要的库链接到不同的发行版上,或者在其他机器上安装其他库,手动或使它们成为安装程序包的依赖项(例如使用RPM)
  • 不要在命令行上如此紧密地指定版本 - 链接libz.so.1而不是libz.so.1.2.3.
  • 针对不同的libc版本编译多个版本.