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<char, std::__1::char_traits<char>, std::__1::allocator<char> > 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<std::__1::back_insert_iterator<fmt::v6::internal::buffer<char> >, 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<char, std::char_traits<char>, std::allocator<char> > 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