> -----Original Message-----
> From: Boost-users <boost-users-boun...@lists.boost.org> On Behalf Of DV 
> Henkel-Wallace via Boost-
> users
> Sent: 9 July 2020 15:41
> To: Mathias Gaunard <mathias.gaun...@ens-lyon.org>
> Cc: DV Henkel-Wallace <gu...@henkel-wallace.org>; boost-users@lists.boost.org
> Subject: Re: [Boost-users] Boost ABI/Linkage of clang vs g++
> 
> 
> > On Jul 9, 2020, at 04:25, Mathias Gaunard <mathias.gaun...@ens-lyon.org> 
> > wrote:
> >
> > On Thu, 9 Jul 2020 at 08:07, DV Henkel-Wallace via Boost-users
> > <boost-users@lists.boost.org> wrote:
> >
> >> 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
> >
> > libc++ is not binary compatible with libstdc++.
> > You need to use either libstdc++ or libc++ with both compilers if you
> > want binary compatibility.
> >
> > This doesn't have anything to do with Boost.
> 
> Thanks Mathias.  I did not express my problem clearly.  This is a b2 issue; I 
> doubt any _library source
> code_ has any direct interaction with this and I'm sorry if I accidentally 
> gave that impression.  Is there a
> way to get b2 to disgorge the environment and tool invocation of each step 
> (basically what is passed to
> system() or exec())?
> 
> The background, perhaps clarified:
> 
> We have our own code, some third party code (like Boost) and of course 
> different runtime platforms
> (Mac, iOS, Linux...).  Since different platforms use different 
> compilers/runtimes as their "native" stack,
> our development system builds everything end-to-end with both gcc and clang 
> to catch problems as
> early as possible.  All compilation is with c++14 or later, post the C++11 
> ABI break, hence the naming
> issues.  This process isolates us from any system libraries that don't have C 
> linkage.
> 
> Therefore g++ is used to compile libstdc++, boost, other third party code, 
> and our code.  Symbols are
> generated that use __c++11:: in their name.
> And clang++ is used to compile libc++, boost, other third party code, and our 
> code.  Symbols are
> generated that use use __1:: in their name.
> 
> But boost itself is compiled via b2 and what is passed to the compiler (and 
> which compiler b2 chooses) is
> quite opaque.  Despite my attempts to force the use of clang it appears that 
> b2 is either calling g++ or
> otherwise asking clang to use g++-style symbol linkage on Linux. On the Mac 
> the same invocation
> behaves as expected.
> 
> 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
> 
> Any thoughts on how to debug this?

Does b2 -debug-configuration help?

https://boostorg.github.io/build/manual/master/index.html   section 3.3 
configuration

☀
        You can use the --debug-configuration option to find which 
configuration files are actually loaded.

Paul



_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
https://lists.boost.org/mailman/listinfo.cgi/boost-users

Reply via email to