I have no ideas about an error involving CXXABI

Alec Teal a.teal@warwick.ac.uk
Tue Dec 3 16:45:00 GMT 2013


On 01/12/13 16:24, Jonathan Wakely wrote:
> [Please don't top-post on this list]
>
> On 1 December 2013 01:04, Alec Teal <a.teal@warwick.ac.uk> wrote:
>> You're right Jonathan (I didn't doubt you really)
>>
>> ls /usr/lib/x86_64-linux-gnu/ -l | grep libstdc
>> lrwxrwxrwx 1 root root       19 May 10  2013 libstdc++.so.6 ->
>> libstdc++.so.6.0.16
>> -rw-r--r-- 1 root root   962656 Apr 16  2012 libstdc++.so.6.0.16
>>
>>
>> I've looked at that page and I didn't think that this could happen.
> What "this" are you talking about?
>
> Your problem is failure to find the right libstdc++.so at run-time.
> That's exactly what that page (and the one it links to in the manual)
> explain how to solve. Why would we write that documentation if the
> problem couldn't happen?
>
>> This
>> means I know less than the installation process than I thought I did. Rather
>> than blindly following that link can you please explain what actually
>> happens? (Though I am not a child if you want to withhold the answer but
>> give me the explanation I'd still appreciate that)
> I don't know what exactly you're asking, particularly if it isn't
> already covered by the link I gave.
>
> When you installed GCC 4.9.0 it put the new libstdc++.so somewhere. I
> don't know where, because you didn't confirm where you'd installed it
> (but I'm still betting it's not in /usr)
>
> When you use GCC 4.9.0 to link your program you create a dependency on
> symbols in the new libstdc++.
>
> When you try to run your program the dynamic linker doesn't know how
> to find the newer libstdc++.
>
> This is all explained in the link I gave you:
>
> "This doesn't mean that the shared library isn't installed, only that
> the dynamic linker can't find it. When a dynamically-linked executable
> is run the linker finds and loads the required shared libraries by
> searching a pre-configured list of directories. If the directory where
> you've installed libstdc++ is not in this list then the libraries
> won't be found."
>
> It also explains how to solve the problem.  I'm not going to type out
> another explanation or paste in more information that is already in
> the docs.  What isn't clear?
A lot of things.

**Quick fix:
LD_LIBRARY_PATH=/usr/local/lib64/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
** (found before finishing this email)

Where has the new libstd++ actually gone? My LD_LIBRARY_PATH is empty, 
this magical prefix doesn't exist. (I'm guessing from ${prefix} that it 
is some list of things?) Why doesn't make fix this for me? Why does the 
one that came with the system get special treatment? I would have 
thought that the install target would have installed the standard 
libraries too.

Linking that page was also annoying because of course I've found and 
read that, as I explained in my first email I'm here on a public mailing 
list confessing that I cannot fix this - in the hope of getting it fixed.

Yes I've also looked at where it says "Finding dynamic or shared libraries".

The closest I have come is to finding Jonathan saying something 
elsewhere. It's really frustrating because I feel no closer to solving 
this problem that seems easy from what I've read.

/usr/local/include/c++/4.9.0/ contains the headers (it is called include)
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/ contains some object 
files and libgcc
/usr/local/share/gcc-4.9.0/ contains something related to Python.

ls -l /usr/local/lib64/ | grep stdc
-rw-r--r-- 1 root root 16344112 Dec  3 16:28 libstdc++.a
-rwxr-xr-x 1 root root      965 Dec  3 16:28 libstdc++.la
lrwxrwxrwx 1 root root       19 Dec  3 16:28 libstdc++.so -> 
libstdc++.so.6.0.19
lrwxrwxrwx 1 root root       19 Dec  3 16:28 libstdc++.so.6 -> 
libstdc++.so.6.0.19
-rwxr-xr-x 1 root root  6644991 Dec  3 16:28 libstdc++.so.6.0.19
-rw-r--r-- 1 root root     2313 Dec  3 16:28 libstdc++.so.6.0.19-gdb.py

Which is mentioned in various blocks from Make's output (like:

----------------------------------------------------------------------
Libraries have been installed in:
    /usr/local/lib/../lib32

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
    - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
      during execution
    - add LIBDIR to the `LD_RUN_PATH' environment variable
      during linking
    - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
    - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

)

Is it these? Why does it install there, why does the directory even 
exist if things have to be made to manually search it?

Alec

(make install-target-libstdc++-v3 has a name that suggests it'll install 
libstdc++v3)




More information about the Gcc-help mailing list