c++ - 如何在旧 OS X 上运行使用新 C++ 标准库编译的软件

标签 c++ macos c++11

我有一个用 libc++(支持 C++11 的 LLVM C++ 标准库)编译的软件。我的软件在新操作系统(os x 10.9 及更高版本)上运行良好。问题是我的软件在旧操作系统(os x 10.8 及以下)上崩溃。我认为这是因为 OS X 10.8 及更早版本上的默认 C++ 运行时是基于 GCC 4.2.1 的 libstdc++ 版本,它不支持 C++11。 我能做什么?

最佳答案

您可能会尝试静态链接您的软件(也许只静态链接 C++ 标准库,动态链接 libc)。

否则,就像在大多数 POSIX 系统上一样,您可以尝试在新操作系统的 chroot 环境中安装旧操作系统。

您也可以尝试为旧操作系统编译新的标准 C++ 库(可能使用交叉编译技巧)。

顺便说一句,您应该使用所有警告和调试信息编译您的代码(因此 clang++ -Wall -g 和/或 g++ -Wall -Wextra -g)。改进你的代码,直到你没有收到警告。使用最近的编译器(例如GCC版本5Clang/LLVM至少3.7版),调试器(gdb),valgrind , Address Sanitizer等。非常 scaredundefined behavior (听起来你的代码可能有一些 UB)。

(您可以从它们的源代码编译最近的编译器和其他免费软件工具)

关于c++ - 如何在旧 OS X 上运行使用新 C++ 标准库编译的软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35429186/

相关文章:

c++ - 旋转 QLabel 并保留其功能/样式表

macos - Postgres - fatal error : database files are incompatible with server

c++ - 实现 AVL 树

c++ - 在 C++11 中通过 const 迭代器进行销毁

python - 类型错误 : '<' not supported between instances of 'PrefixRecord' and 'PackageRecord' while updating Conda

c++ - 在 C++ 中是否允许从括号值列表中赋值 std::array?

c++ - 为什么不常用算术表示?

c++ - 如何将变量与 vector 中包含的对象的成员变量进行比较

c++ - 如何在eclipse C/C++项目中使用sqlite3.c和sqlite3.h

objective-c - 如何非模态打开 NSOpenPanel (因为我要打开现有工作表)