我知道某些版本的编译器会破坏C ++ ABI,但我不知道哪些版本。
我是否需要为我想支持的每个操作系统版本使用不同版本的Xcode?如果是这样,我应该使用哪个版本的Xcode?
答案 0 :(得分:0)
我相信Qt用他们的“Qt 5.10的支持配置”表来回答这个问题
https://doc.qt.io/qt-5.10/supported-platforms.html
三个版本将使用:
Xcode 8.2(macOS 10.11)
Xcode 8.3.3(macOS 10.12)
Xcode 9(macOS 10.13)
答案 1 :(得分:0)
您似乎期待Linux上常见的各种C ++编译器/ ABI兼容性问题。 OS X / macOS在很大程度上没有这样的问题 - 您可以针对最新的SDK(10.13)构建二进制文件,并将部署目标设置为您要支持的最旧的OS版本(即10.10)。生成的二进制文件将在10.10及更高版本上运行,不需要为不同的OS版本构建多个二进制文件。
在命令行上,可以使用-mmacosx-min-version=
设置部署目标。如果您尝试使用目标版本上不可用的库/语言功能(如std::shared_timed_mutex
,一个新的C ++ 14功能),编译器甚至会出错。请注意,一些新的语言功能(如std::make_unique
此处)在编译器/头文件中实现,因此旧库不是问题:
$ cat test5.cpp
#include <memory>
#include <shared_mutex>
int main()
{
auto x = std::make_unique<int>(3);
printf("%d\n", *x);
std::shared_timed_mutex y;
return 0;
}
$ clang++ -std=c++14 -o test5 test5.cpp -mmacosx-version-min=10.9
test5.cpp:8:7: error: 'shared_timed_mutex' is unavailable: introduced in macOS 10.12
std::shared_timed_mutex y;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/shared_mutex:204:58: note: 'shared_timed_mutex' has been
explicitly marked unavailable here
class _LIBCPP_TYPE_VIS _LIBCPP_AVAILABILITY_SHARED_MUTEX shared_timed_mutex
^
1 error generated.