Re: I have no ideas about an error involving CXXABI

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Dec 3, 2013 4:45 PM, "Alec Teal" wrote:
>
>
> **Quick fix:
> LD_LIBRARY_PATH=/usr/local/lib64/:$LD_LIBRARY_PATH
> export LD_LIBRARY_PATH
> ** (found before finishing this email)

Yes, that's what it said to do in the docs I keep telling you to read!
(although it could do with an update for 64-bit libs installed by multilib GCC.)

> Where has the new libstd++ actually gone?

Wherever you installed the new GCC.

> My LD_LIBRARY_PATH is empty,

GCC doesn't alter it, that's your job.

> this magical prefix doesn't exist. (I'm guessing from ${prefix} that it is some list of things?)

No, it's a placeholder (using shell variable syntax) for the prefix
where you installed GCC.

In the libstdc++ manual that's referred to as "destdir".

The documentation assumes (maybe incorrectly) you are familiar with
using the shell and the conventions of Unix software installed with
configure and make commands. I'll update the FAQ to be explicit about
what ${prefix} refers to.

> Why doesn't make fix this for me?

It's your responsibility. Make does not alter your shell environment,
that would be bad manners, and cause havoc if you don't want the new
libraries in your library path.

So instead the installation process prints out the instructions you
need, and we document those instructions in the libstdc++  manual and
FAQ.

> Why does the one that came with the system get special treatment?

Because it's special! It's the one your whole system relies on, and
because it installed the libraries in a system directory that is
automatically included in the dynamic linker's search path.

Your distro ensures that packages installed as part of the system can
be found. It doesn't do that for software you install in other
locations, that's your job, not GCC's and not Make's.

The dynamic linker does not automatically look in arbitrary
directories for libraries that may or may not have been installed by
users who may or may not know what they're doing.

That is how GNU/Linux works.

Your question is like asking why /usr/bin is in your $PATH but
/home/Fred/some/arbitrary/path/bin isn't. Because Unix.

> I would have thought that the install target would have installed the standard libraries too.

It did. Read the bloody link again and pay attention this time.

I'll quote it *again*:
"This doesn't mean that the shared library isn't installed, only that
the dynamic linker can't find it."

> 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.

And the page has the answer.

You asked exactly the question that page answers. It's a frequently
asked question, probably the most frequently asked. The obvious
response is to point you to the answer (answering FAQs is annoying
too). We weren't to know you'd read the answer but don't understand
it.

If you had said you'd read it and what parts of it you don't
understand maybe you would have saved some wasted time.

> 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

Those are the libraries you're looking for. Why do you think they're
not installed?

So at last we know that you installed with prefix=/usr/local (probably
because that's the default and you didn't change it.)

> 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?

Yes.

That info refers to the 32-bit libs. Earlier there will be similar
output referring to the 64-bit libs in /usr/local/lib64

> Why does it install there,

That's how GNU/Linux works.

When you configured GCC you told it (maybe implicitly) to install to
/usr/local, so the libraries go in a sub-directory of that prefix. See
http://gcc.gnu.org/install/configure.html

> why does the directory even exist if things have to be made to manually search it?

I don't understand the question.

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

It's already installed. That is run as part of "make install".

Aside: since you're installing to /usr/local it looks as though you're
building and installing as root. That's a good way to trash your
system if you don't understand what you're doing.





[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux