我有一个用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。 我该怎么办?
答案 0 :(得分:3)
您可能会尝试静态链接您的软件(可能静态链接C ++标准库,动态链接libc
。)
否则,与大多数POSIX系统一样,您可以尝试在新操作系统的chroot
环境中安装旧操作系统。
您也可以尝试为旧操作系统编译新的标准C ++库(可能使用交叉编译技巧)。
顺便说一句,您应该使用所有警告和调试信息编译代码(所以clang++ -Wall -g
和/或g++ -Wall -Wextra -g
)。改进您的代码,直到您没有警告。使用最近的编译器(例如GCC版本5,Clang/LLVM版本3.7至少),调试器(gdb
),valgrind ,Address Sanitizer等。scared的非常 undefined behavior(它的气味可能就像你的代码可能有一些UB)。
(您可以从源代码中编译最新的编译器和其他免费软件工具)
答案 1 :(得分:1)
在xcode中,您可以将OS X部署目标设置为您想要的最低版本
项目名称(1) - >构建设置(2) - >部署目标(3)
并进一步验证它在
中正确设置的方言Apple LLVM 7.0 - 语言C ++ - > C ++语言方言 - > C ++ 11