Re: shared libraries version

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

 



"BeefStu BeefStu" <beefstu350@xxxxxxxxxxx> writes:

> I have sample c++ program, which I am compiling (see steps below)
> onSolaris 2.8, which uses the following version of g++.
> 
> /usr/local/bin/GNU/bin/g++ -c ./test.cpp -o test.o
> /usr/local/bin/GNU/bin/g++ -g test.o -o test
> 
> 
> /usr/local/bin/GNU/bin/g++ -v
> Reading specs from
> /usr/local/bin/GNU/lib/gcc-lib/sparc-sun-solaris2.8/3.3.2/specs
> Configured with: /db_backups/gcc/srcdir/gcc-3.3.2/configure
> --prefix=/usr/local/
> bin/GNU --disable-nls --enable-threads=posix --enable-languages=c,c++
> --with-sys
> tem-zlib
> Thread model: posix
> gcc version 3.3.2
> 
> An ldd on the executable repors that it needs verion 5 of libstdc++.so.
> 
> ldd ./test
>          libstdc++.so.5 =>
> /usr/local/bin/GNU/lib/libstdc++.so.5
>          libm.so.1 =>                    /usr/lib/libm.so.1
>          libgcc_s.so.1 =>
> /usr/local/bin/GNU/lib/libgcc_s.so.1
>          libc.so.1 =>                    /usr/lib/libc.so.1
>          libdl.so.1 =>                   /usr/lib/libdl.so.1
>          /usr/platform/SUNW,Ultra-Enterprise/lib/libc_psr.so.1
> 
> 
> Why is g++ referencing a specific version of a library instead of a
> generic name? I would have hope do seen libstdc++.so as the
> requirement.
> 
> This way if there was a bug in libstdc++.so.5, version libstdc++.so.6
> can be installed, re-named to libstdc++.so and this would not require
> me to
> re-build my executables.

Unfortunately, libstdc++.so.5 (which is from gcc 3.3.x) and
    libstdc++.so.6 (which is from gcc 3.4.0) are not binary
    compatible.

The policy is change the version number on libstdc++.so every time a
    non-compatible change is made. Otherwise, the name isn't
    change. (For example, the libstdc++.so.5 shipped with gcc 3.3.3
    contains bugfixes not that shipped with 3.3.[012], yet they are
    all called libstdc++.so.5, becausee they are compatible.)

> 
> >Can you tell g++ to use libstdc++.so instead of libstdc++.so.5

No. If you could, every dynamicly linked program complied with
    libstdc++.so.5 would break if you then installed libstdc++.so.6,
    and the linker found libstdc++.so.6 instead.

[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