0

第一个问题:使用单个 C++11 二进制文件支持各种“标准”Linux 平台的最佳方式是什么?这个二进制文件使用了一些第三方库,包括 boost、zlib、xml2、openssl(所有这些我都可以静态构建)。

二进制文件必须在 x86_64 的各种 Linux 平台上运行:Ubuntu 16.04 和 14.04、Centos 7.2 和 Debian。很快它就必须在 Beagle Bone Black 上的 Darwin x86_64 和 Ubuntu 16.04 上运行。

编译器、libstdc++ 和 libc 运行时的默认版本在这些平台上差别很大。我在 Ubuntu 14.04 上使用这些编译器选项(注意不使用“-static”开关)升级了(工具链 r-test)g++ 5.3 编译器,并在 Linux 上取得了一些成功:

-static-libstdc++ -static-libgcc -D_GLIBCXX_USE_CXX11_ABI=0

但是,这需要在主机上安装升级后的 5.3 编译器(默认为 4.9 IIRC)和目标平台上的一些运行时库,这不是首选并且存在 libc.so 问题的风险。如果应该确定这种解决方案是最好的,那么我宁愿在 16.04 上使用最新的 g++ 或带有开关的 clang 构建二进制文件,这样二进制文件就可以在旧平台上运行,而对默认值的更改最少。是的,我知道我可能在求月亮:)

第二个问题:不是一个二进制文件,而是一个编译器和 libc,适用于所有平台,包括 Darwin 和 Windows?

我也在考虑尝试使用 musl 创建一个“行为更一致的二进制文件”。我可以考虑使用 clang 而不是 g++。

任何有经验/建议的人?我非常希望避免为每个平台维护单独的编译和第三方库和编译器的组合以及设置和升级(特别是对于 Linux 目标,但对于不同的操作系统来说非常典型)。

使用相同版本的相同编译器和可能相同版本的 libc 是最好的,但可能是不可能的:clang 与 musl?

谢谢

4

0 回答 0