TL; DR: текстовое приложение C++ 11/Boost/Openssl, построенное на OS X 10.8. Должен ли такой же скомпилированный двоичный файл работать без изменений 10.9 и 10.10? Или я должен скомпилировать его для каждой версии?Может ли текстовое приложение на C++, составленное на OS X 10.8, работать с 10.9 и 10.10?
Деталь:
C++ 11 приложений и статическая библиотека, которая использует OpenSSL, а также повышение :: регулярного выражения, повышение :: ASIO, и повышение :: системы. Я использую cmake (поскольку это порт из Linux + Windows), и все строит и работает отлично на 10.8.2 [Mountain Lion].
Но когда приложение установлено на новее OS X, таких как 10.9, мы видим эту ошибку:
dyld: Symbol not found: __ZTISt16invalid_argument
Referenced from: /usr/bin/myapp
Expected in: /usr/local/lib/libboost_regex-mt.dylib
in /usr/bin/myapp
Trace/BPT trap: 5
libboost_regex-mt.dylib не нашли __ZTISt16invalid_argument
. Я предполагаю, что std::invalid_argument
должен быть в libC++, поэтому что-то пошло не так. (Является ли эта часть libstdC++ против LibC++ проблема, которую я слышал о?)
Это, как я считаю, мои библиотечных зависимостей в CMake:
SET (Boost_DEBUG 0)
SET (Boost_USE_STATIC_LIBS OFF)
SET (Boost_USE_MULTITHREADED ON)
SET (Boost_USE_STATIC_RUNTIME OFF) # also tried "ON"
FIND_PACKAGE (Boost REQUIRED COMPONENTS regex system date_time)
FIND_PACKAGE (OpenSSL REQUIRED)
FIND_PACKAGE (Threads REQUIRED)
Эти флаги я предлагаю построить:
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic -std=c++11 -stdlib=libc++ -DMAC_OS_X_VERSION_MIN_REQUIRED=1000")
Когда я первый запустить cmake
он показывает следующее:
-- The C compiler identification is AppleClang 5.1.0.5030040
-- The CXX compiler identification is AppleClang 5.1.0.5030040
...
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features - done
кажется ошибку компоновщика, то, что вы должны заботиться с '' link_directories' и командами target_link_libraries' (см CMake документации) – Antonio