使用 vcpkg 如何使用不同的 C++ 标准构建提升?

With vcpkg how do I build boost using a different c++ standard?

在 macos 10.14.1 上构建与 boost 的默认 vcpkg 构建链接的应用程序会产生以下错误:

Undefined symbols for architecture x86_64:
  "boost::system::detail::system_category_instance", referenced from:
      boost::system::system_category()     in main.cxx.o
      boost::asio::io_context::run()    in main.cxx.o
      boost::asio::detail::socket_ops::close(int, unsigned char&, bool, boost::system::error_code&) in main.cxx.o
      boost::asio::detail::socket_holder::~socket_holder() in main.cxx.o
      boost::asio::detail::reactive_socket_service_base::destroy(boost::asio::detail::reactive_socket_service_base::base_implementation_type&) in main.cxx.o
      _main in main.cxx.o
      boost::asio::ip::basic_resolver_iterator<boost::asio::ip::tcp> boost::asio::connect<boost::asio::ip::tcp, boost::asio::ip::basic_resolver_iterator<boost::asio::ip::tcp> >(boost::asio::basic_socket<boost::asio::ip::tcp>&, boost::asio::ip::basic_resolver_iterator<boost::asio::ip::tcp>, boost::asio::ip::basic_resolver_iterator<boost::asio::ip::tcp>) in main.cxx.o
      ...
  "boost::system::detail::generic_category_instance", referenced from:
      boost::system::generic_category()     in main.cxx.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[2]: *** [cleverly] Error 1
make[1]: *** [CMakeFiles/cleverly.dir/all] Error 2
make: *** [all] Error 2

如果我没看错:

我假设必须使用与应用程序相同版本的 c++ 重新编译 boost。

使用 vcpkg,如何改变用于编译 boost 库的 c++ 标准?

更新

libboost_system.a确实是64位。

lipo -info libboost_system.a
Non-fat file: libboost_system.a is architecture: x86_64

make 为 运行 且 VERBOSE=1 时链接命令:

/usr/local/Cellar/cmake/3.12.4/bin/cmake -E cmake_link_script CMakeFiles/cleverly.dir/link.txt --verbose=1
/usr/local/bin/g++-HEAD   -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names  CMakeFiles/cleverly.dir/Users/sheel/Projects/sheeldme/cleverly-misogamist/source/main.cxx.o  -o cleverly /opt/vcpkg/installed/x64-osx/debug/lib/libboost_system.a /opt/vcpkg/installed/x64-osx/debug/lib/libboost_filesystem.a /opt/vcpkg/installed/x64-osx/debug/lib/libboost_date_time.a /opt/vcpkg/installed/x64-osx/debug/lib/libboost_thread.a /opt/vcpkg/installed/x64-osx/debug/lib/libboost_regex.a /opt/vcpkg/installed/x64-osx/debug/lib/libboost_serialization.a /opt/vcpkg/installed/x64-osx/debug/lib/libboost_chrono.a /opt/vcpkg/installed/x64-osx/debug/lib/libboost_atomic.a

符号table通过:objdump -t libboost_system.a

libboost_system.a(error_code.o):    file format Mach-O 64-bit x86-64

SYMBOL TABLE:
0000000000016138 l       __DATA,__bss   __ZGVZNK5boost6system6detail22generic_error_category7messageEiE11unknown_err
0000000000016120 l       __DATA,__bss   __ZZNK5boost6system6detail22generic_error_category7messageEiE11unknown_err
0000000000001080 l       __TEXT,__gcc_except_tab    GCC_except_table0
0000000000016178 l       __DATA,__bss   __ZGVZN5boost6system6detail20generic_category_ncxEvE25generic_category_instance
0000000000016160 l       __DATA,__bss   __ZZN5boost6system6detail20generic_category_ncxEvE25generic_category_instance
0000000000016158 l       __DATA,__bss   __ZGVZN5boost6system6detail19system_category_ncxEvE24system_category_instance
0000000000016140 l       __DATA,__bss   __ZZN5boost6system6detail19system_category_ncxEvE24system_category_instance
0000000000001060 gw    F __TEXT,__text  __ZN5boost6system14error_category12std_categoryD0Ev
0000000000001050 gw    F __TEXT,__text  __ZN5boost6system14error_category12std_categoryD1Ev
0000000000000e90 g     F __TEXT,__text  __ZN5boost6system6detail19system_category_ncxEv
0000000000000f20 g     F __TEXT,__text  __ZN5boost6system6detail20generic_category_ncxEv
0000000000001030 gw    F __TEXT,__text  __ZN5boost6system6detail21system_error_categoryD0Ev
0000000000000f10 gw    F __TEXT,__text  __ZN5boost6system6detail21system_error_categoryD1Ev
0000000000000fb0 gw    F __TEXT,__text  __ZN5boost6system6detail22generic_error_categoryD0Ev
0000000000000fa0 gw    F __TEXT,__text  __ZN5boost6system6detail22generic_error_categoryD1Ev
0000000000001010 gw    F __TEXT,__text  __ZNK5boost6system14error_category10equivalentERKNS0_10error_codeEi
0000000000000fe0 gw    F __TEXT,__text  __ZNK5boost6system14error_category10equivalentEiRKNS0_15error_conditionE
0000000000001070 gw    F __TEXT,__text  __ZNK5boost6system14error_category12std_category4nameEv
0000000000000fd0 gw    F __TEXT,__text  __ZNK5boost6system14error_category23default_error_conditionEi
0000000000000220 g     F __TEXT,__text  __ZNK5boost6system6detail21system_error_category23default_error_conditionEi
0000000000001040 gw    F __TEXT,__text  __ZNK5boost6system6detail21system_error_category4nameEv
0000000000000e00 g     F __TEXT,__text  __ZNK5boost6system6detail21system_error_category7messageEi
0000000000000fc0 gw    F __TEXT,__text  __ZNK5boost6system6detail22generic_error_category4nameEv
0000000000000000 g     F __TEXT,__text  __ZNK5boost6system6detail22generic_error_category7messageEi
0000000000001148 gw      __DATA,__const __ZTIN5boost12noncopyable_11noncopyableE
0000000000001220 gw      __DATA,__const __ZTIN5boost6system14error_category12std_categoryE
0000000000001160 gw      __DATA,__const __ZTIN5boost6system14error_categoryE
00000000000011e0 g       __DATA,__const __ZTIN5boost6system6detail21system_error_categoryE
0000000000001180 g       __DATA,__const __ZTIN5boost6system6detail22generic_error_categoryE
0000000000001280 gw      __TEXT,__const __ZTSN5boost12noncopyable_11noncopyableE
00000000000012e0 gw      __TEXT,__const __ZTSN5boost6system14error_category12std_categoryE
0000000000001260 gw      __TEXT,__const __ZTSN5boost6system14error_categoryE
00000000000012b0 g       __TEXT,__const __ZTSN5boost6system6detail21system_error_categoryE
0000000000001230 g       __TEXT,__const __ZTSN5boost6system6detail22generic_error_categoryE
00000000000011f8 gw      __DATA,__const __ZTVN5boost6system14error_category12std_categoryE
0000000000001198 g       __DATA,__const __ZTVN5boost6system6detail21system_error_categoryE
0000000000001100 g       __DATA,__const __ZTVN5boost6system6detail22generic_error_categoryE
0000000000000000         *UND*  __Unwind_Resume
0000000000000000         *UND*  __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc
0000000000000000         *UND*  __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_
0000000000000000         *UND*  __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev
0000000000000000         *UND*  __ZTVN10__cxxabiv117__class_type_infoE
0000000000000000         *UND*  __ZTVN10__cxxabiv120__si_class_type_infoE
0000000000000000         *UND*  __ZdlPv
0000000000000000         *UND*  ___cxa_atexit
0000000000000000         *UND*  ___cxa_begin_catch
0000000000000000         *UND*  ___cxa_end_catch
0000000000000000         *UND*  ___cxa_guard_acquire
0000000000000000         *UND*  ___cxa_guard_release
0000000000000000         *UND*  ___dso_handle
0000000000000000         *UND*  ___gxx_personality_v0
0000000000000000         *UND*  ___stack_chk_fail
0000000000000000         *UND*  ___stack_chk_guard
0000000000000000         *UND*  _free
0000000000000000         *UND*  _malloc
0000000000000000         *UND*  _strerror_r

修补 vcpkg/ports/boost-modular-build-helper/CMakeLists.txt 处的文件。

使用 cxxstd= 后接您希望编译的标准来修补自定义增强目标。

参考:https://github.com/Microsoft/vcpkg/issues/4476