如何在旧的os x上运行使用新C ++标准库编译的软件

时间:2016-02-16 09:55:54

标签: 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。 我该怎么办?

2 个答案:

答案 0 :(得分:3)

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

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

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

顺便说一句,您应该使用所有警告和调试信息编译代码(所以clang++ -Wall -g和/或g++ -Wall -Wextra -g)。改进您的代码,直到您没有警告。使用最近的编译器(例如GCC版本5Clang/LLVM版本3.7至少),调试器(gdb),valgrindAddress Sanitizer等。scared非常 undefined behavior(它的气味可能就像你的代码可能有一些UB)。

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

答案 1 :(得分:1)

在xcode中,您可以将OS X部署目标设置为您想要的最低版本

  

项目名称(1) - >构建设置(2) - >部署目标(3)

并进一步验证它在

中正确设置的方言
  

Apple LLVM 7.0 - 语言C ++ - > C ++语言方言 - > C ++ 11

category object