【问题标题】:Distribute C++ binaries across linux跨 Linux 分发 C++ 二进制文件
【发布时间】:2017-08-08 15:13:11
【问题描述】:

我想分发使用 Eclipse ++ IDE 创建的 C++ 二进制文件,设置如下:

Cross GCC Compiler: gcc -std=c++17 
Cross G++ Compiler: g++ -std=c++17
Tool Chain settings:
Cross GCC Compiler
Cross G++ Compiler
Cross GCC Linker
Cross G++ Linker
Cross GCC Archiver
Cross GCC Assembler

我正在使用boost::serilization 进行编译,并已将其连接到Linker。二进制文件在Ubuntu 16.04 上创建。我试图在Ubuntu 14.04 上运行二进制文件,它给出了错误:

加载共享库时出错:libboost_serialization.so.1.58.0:无法打开共享对象文件:没有这样的文件或目录。

我还通过使用在系统上安装了libboost

sudo apt-get install libboost-program-options-dev

但是,它给了我同样的错误。

我认为使用上述Eclipse IDE 设置,它应该适用于大多数Linux platforms。我对它在大多数Linux 平台上工作的假设是错误的吗??。

【问题讨论】:

  • 你在目标机器上有什么版本的 boost?
  • @TheQuantumPhysicist 1.54.0 ,错误说它需要1.58.0 ??
  • 你去...这就是你的答案!

标签: c++ linux eclipse binaryfiles


【解决方案1】:

当您构建您的程序时,您会将其与特定版本的共享库链接起来。在旧版本上,例如Ubuntu 那些较新版本的库不存在。

如果你想在不同系统之间复制可执行文件,你需要静态链接。这意味着所有库都链接到可执行文件,因此它不依赖于共享库。当然,它会使可执行文件更大。

【讨论】:

  • 感谢您的回答。使用该设置,它应该适用于所有Linux 平台
  • @AwaitedOne 好吧,您仍然需要考虑不同的 32 位和 64 位平台。真正的旧系统也可能存在兼容性问题。但是,如果您将其保留在过去 5 年左右创建的系统中,则应该不是什么大问题(不包括 32/64 位的东西)。
猜你喜欢
  • 2010-11-19
  • 2011-04-13
  • 1970-01-01
  • 2013-05-05
  • 2016-05-14
  • 2017-10-11
  • 1970-01-01
  • 2021-08-26
  • 2017-09-22
相关资源
最近更新 更多