[cfe-dev] libcxx install location?

Jean-Daniel Dupas devlists at shadowlab.org
Sat Feb 5 08:26:31 PST 2011


Le 5 févr. 2011 à 16:56, Larry Evans a écrit :

> On 02/05/11 09:09, Jean-Daniel Dupas wrote:
>> 
>> Le 5 févr. 2011 à 15:05, Larry Evans a écrit :
>> 
>>> On 02/05/11 07:52, Jean-Daniel Dupas wrote:
>>>> 
>>>> Le 5 févr. 2011 à 14:26, Larry Evans a écrit :
>>> [snip]
>>>>> Am I missing something?
>>>> 
>>>> I don't have access to my linux machine right now, so I cannot test,
>>>> but I think you can link on libstdc++ to get the missing symbols
>>>> (just adding -lstdc++ to the linker flags should be enough).
>>>> 
>>>> It should not conflict with libc++ symbols as libc++ uses inline
>>>> namespace, and so mangle the standard symbols differently than the
>>>> libstdc++.
>>>> 
>>>> This is what we use to do on OS X before we got a separate libc++abi
>>>> library.
>>>> 
>>>> -- Jean-Daniel
>>> 
>>> Thanks Jean; however, I'm getting the same error:
>> 
>> OK. In fact, you have to add this flag to the libc++ LDFLAGS (in buildit
>> script).
>> Make sure to also add -std=c++0x  to the cflags to enable latest clang
>> enhancements.
>> 
>>    EXTRA_FLAGS="-std=c++0x"
>>    LDSHARED_FLAGS="-o libc++.so.1.0 \
>>        -shared -nodefaultlibs -Wl,-soname,libc++.so.1 \
>>        -lpthread -lrt -lc -lstdc++"
>> 
>> 
>> As the library soname is libc++.so.1, you have to create a
>> /usr/lib/libc++.so.1 symlink that point to the library. Else you will
>> get a "library not found" runtime error.
>> 
>> After theses changes, I was able to compile a simple hello world program.
>> 
>> --------- hello.cpp
>> #include <iostream>
>> 
>> int main (int argc, char * const argv[]) {
>>    // insert code here...
>>    std::cout << "Hello, World!\n";
>>    return 0;
>> }
>> ------------------------
>> 
>> Unfortunalty, this simple code does not run properly. It prints "Hello
>> World", and then a lot of garbage (and sometimes segfault too).
>> 
>> But this may be a good base to start hacking on libc++.
>> 
>> 
>> -- Jean-Daniel
> 
> I really appreciate the help Jean-Daniel!
> 
> I did make the changes you suggested to the buildit, then
> invoked buildit, then added the symlink; however, now
> the compiler can't find the just created libc++ :(
> 
> /usr/lib $ sudo ln -sf
> /home/evansl/download/llvm/svn/llvm/projects/libcxx/lib/libc++.so.1.0
> libc++.so.1.0

should be 

cd /usr/lib
sudo ln -sf /home/evansl/download/llvm/svn/llvm/projects/libcxx/lib/libc++.so.1.0 libc++.so
sudo ln -sf /home/evansl/download/llvm/svn/llvm/projects/libcxx/lib/libc++.so.1.0 libc++.so.1

You need a libc++.so symlink to compile (that what the static linker expects), and a libc++.so.1 (no .0 here) symlink to run your program (that what the dynamic linker is looking for).


-- Jean-Daniel








More information about the cfe-dev mailing list