boost-users@lists.boost.org
We build with clang++-10 w/libc++.a and g++-10 w/libstdc++.a, so build a copy of boost in each configuration as well. This works great on the Mac development machines but the clang case doesn't generate the correct linkage on the Linux deployment machines. The correct clang linkage is std::__1::basic_string... but boost builds with std::__cxx11::basic_string
Here's the linkage of libc++:
$ objdump -T /usr/lib/llvm-10/lib/libc++.so.1|c++filt|grep ::basic_string|head -1
0000000000057450 g DF .text 0000000000000048 Base std::__1::locale::locale(std::__1::basic_string const&)
Notice: std::__1::basic_string< ...
When compiling my own code with clang++-10 the correct symbol is generated:
$ nm options.cc.o |c++filt |fgrep __ |fgrep ::set_option_name |head -1
0000000000000000 W fmt::v6::basic_format_context, char>::iterator...
Notice std::__1:: ...
However the boost object have the wrong symbol name:
$ nm 3P/llvm/lib/libboost_program_options.a |c++filt |fgrep __ |fgrep ::basic_string |head -1
0000000000000000 W boost::program_options::unknown_option::unknown_option(std::__cxx11::basic_string const&)
Notice std::__cxx11::basic_string< ...
I'm compiling boost this way:
export CC=clang CXX="clang++ -stdlib=libc++" CXXSTD=c++20 ; ./b2 stdlib=libc++ toolset=clang boost.locale.icu=off boost.locale.std=off --with-atomic --with-chrono --with-date_time --with-headers --with-locale --with-log --with-program_options --with-random --with-regex --with-system --with-thread threading=multi -sNO_COMPRESSION=1 link=static install
It's 1.73.0