Вы, кажется, ожидаете, что типичные проблемы совместимости компилятора C / ABI в Linux характерны для Linux.OS X / macOS в основном не имеет подобных проблем - вы можете создать двоичный файл из последней версии SDK (10.13) и установить для цели развертывания самую старую версию ОС, которую вы хотите поддерживать (например, 10.10).Полученный двоичный файл будет работать с 10.10 и выше, нет необходимости создавать несколько двоичных файлов для разных версий ОС.
В командной строке цель развертывания можно установить с помощью -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.