[cfe-dev] unraveling libcxxabi/libcxx

David Fang fang at csl.cornell.edu
Tue Apr 2 18:04:30 PDT 2013


>> I'm currently looking into porting libcxx to an ancient system
>> (powerpc-darwin8), and I noticed that libcxx depends on libcxxabi. 
>> However, libcxxabi's sources include headers like <exception> 
>> which are expected to be in some C++ library.  Does it (mutually) 
>> depend on libcxx? Maybe this was obvious, but I take it libcxxabi 
>> needs a c++11 compiler to build, correct?  (This would be fine, as 
>> I have stage-1 clang built from gcc-4.0/libstdc++.)  Does one 
>> {libcxx,libcxxabi} need to be installed before the other, or 
>> should they be built cross-referencing each others include dirs? 
>> In terms of shared-library dependencies, libcxx should link to 
>> libcxxabi, right?
>> Is there better documentation somewhere that I don't know about? All I 
>> see are html pages at http://libcxxabi.llvm.org and 
>> http://libcxx.llvm.org/.
> Contributions to better documentation (and your experiences in doing 
> this) are welcome. :-)

Sure, once I have a better understanding (and success). 
(And maybe along with it some Makefile/autotool files...)

> Yes, libcxxabi is the lower-level library.  libcxx should link to 
> libcxxabi.
> Yes, currently libcxxabi is using -std=c++0x and probably needs it, 
> though I can't think offhand of a specific need.  If you need to, try 
> changing that to -std=c++03.  If there's any breakage it will almost 
> certainly be compile-time breakage.  So that is a safe experiment.

One symbol that is referenced is std::get_unexpected(), which is both new 
and deprecated in c++11.  Another c++11 symbol needed is 
std::get_terminate().  I discovered this when I tried to use g++-4.0's 
libstdc++ headers and got compilation errors.

> libcxxabi is designed to be ABI compatible with a gcc-4.2 era libstdc++. 
> And therefore could almost certainly use a libstdc++-4.2 set of headers 
> if need be to build against (another untested theory).

I also encountered:
../src/cxa_exception.hpp:66:9: error: unknown type name '_Unwind_Exception'

and a search led me to various versions of "unwind.h".
The one in clang does some include_next magic.
I did however find one buried in 
with the needed typedef.
I'm trying that now, but stop me if I'm going down a wrong path!

> As libcxxabi is the lower-level library, I would go with installing that 
> first.  But understand you're traversing territory where few have gone 
> before.

I'll try this, pointing to libcxx's headers just for the prototypes that 
are needed from <exception>.  As you said, there should be no symbol 
dependence to libcxx.

> Keep us posted, and blogs of your experience which might help future 
> porters are welcome.
> Howard


David Fang

More information about the cfe-dev mailing list