c++, Mac OS X, Xcode 8: Compile Boost:设置部署目标为OS X 10.11

C++, Mac OS X, Xcode 8 : Compile Boost : Set deployment target to OS X 10.11

本文关键字:OS 目标 部署 设置 Boost Xcode c++ Compile Mac      更新时间:2023-10-16

我正在尝试在Mac OS X 10.11.6上使用Boost CPP库。我从官方SourceForge存储库下载了1.62版本的Boost。按照这里的文档提取并构建:http://www.boost.org/doc/libs/1_62_0/more/getting_started/unix-variants.html

基本上,我进入目录并运行"bootstrap.sh"answers"b2"脚本。

然后我创建了一个简单的c++程序:
#include <iostream>
#include <string>
#include <boost/algorithm/string.hpp>
#include <boost/regex.hpp>
int main() {
  std::string str1(" hello world! ");
  boost::to_upper(str1);
  std::cout << str1 << std::endl;
  std::string s = " Boost Libraries ";
  boost::regex expr{"\s"};
  std::string fmt{"_"};
  std::cout << boost::regex_replace(s, expr, fmt) << 'n';
  return 0;
}

并尝试使用以下CMake文件

构建它
cmake_minimum_required(VERSION 2.8.9)
set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++")
project(app_project)
set(Boost_USE_STATIC_LIBS ON) 
set(Boost_USE_MULTITHREADED ON)  
set(Boost_USE_STATIC_RUNTIME ON) 
find_package(Boost 1.62.0 COMPONENTS regex) 
if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS}) 
    add_executable(myapp main.cpp)
    target_link_libraries(myapp ${Boost_LIBRARIES})
endif()

当我编写程序时,我得到以下警告:

ld: warning: object file (/Users/pritam/opt/boost_1_62_0/stage/lib/libboost_regex.a(instances.o)) was built for newer OSX version (10.12) than being linked (10.11)
ld: warning: object file (/Users/pritam/opt/boost_1_62_0/stage/lib/libboost_regex.a(regex.o)) was built for newer OSX version (10.12) than being linked (10.11)
ld: warning: object file (/Users/pritam/opt/boost_1_62_0/stage/lib/libboost_regex.a(regex_traits_defaults.o)) was built for newer OSX version (10.12) than being linked (10.11)
ld: warning: object file (/Users/pritam/opt/boost_1_62_0/stage/lib/libboost_regex.a(regex_raw_buffer.o)) was built for newer OSX version (10.12) than being linked (10.11)
ld: warning: object file (/Users/pritam/opt/boost_1_62_0/stage/lib/libboost_regex.a(cpp_regex_traits.o)) was built for newer OSX version (10.12) than being linked (10.11)
ld: warning: object file (/Users/pritam/opt/boost_1_62_0/stage/lib/libboost_regex.a(static_mutex.o)) was built for newer OSX version (10.12) than being linked (10.11)

我在这台机器上安装了XCode 8。似乎在构建Boost时,它将部署目标设置为OS X 10.12。

所以问题是:

在构建Boost时如何将部署目标设置为OS X 10.11 ?

要以低于当前OSX版本的最小OSX版本为目标,您需要设置-mmacosx-version-min选项。因此,如果您使用toolset=darwin,则需要构建为:

b2 macosx-version-min=10.11 ...

由于该工具集对OSX最小版本有特殊处理。或者,如果您使用toolset=clang,则需要构建为:

b2 cflags=-mmacosx-version-min=10.11 cxxflags=-mmacosx-version-min=10.11 mflags=-mmacosx-version-min=10.11 mmflags=-mmacosx-version-min=10.11 linkflags=-mmacosx-version-min=10.11 ...