[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

how to use libstdc++.so.5 instead of libstdc++.so.6

Alexander Dong Back Kim

9/30/2008 5:30:00 AM

Dear all members,

First of all, I apologize I posted such a topic which is not purely
related with this group. The reason why I posted this is I hope some
of members this group knows about g++ and they have better idea about
my problem so please forgive my post.

I have this problem that development machine's default C++ library is
libstdc++.so.6. of course the OS is linux. However, the target machine
has libstdc++.so.5 so I copied the library file to dev machine.

Therefore, the dev machine has both version 5 and 6 of libstdc++
whereas the target machine has only version 5. I wrote and tested the
following application (not really an application) on the target
machine.

#include <iostream>
using namespace std;
int main() { cout << "hello" << endl; return 0; }

I compile the code with...

target $ g++ main.cpp

It, of course, produces "a.out". I did "ldd" to see what shared (or
dynamic) library the application links and the result was...

libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x00c25000)
libm.so.6 => /lib/tls/libm.so.6 (0x00951000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x006af000)
libc.so.6 => /lib/tls/libc.so.6 (0x0026c000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00a42000)

Now I compiled the same application on the dev machine and did the
same command and the result is...

libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x005e8000)
libm.so.6 => /lib/tls/libm.so.6 (0x00372000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00555000)
libc.so.6 => /lib/tls/libc.so.6 (0x0023e000)
/lib/ld-linux.so.2 (0x00224000)

If I run the application, which was compiled on the dev machine, on
the target machine it says an error message...

../a.out: error while loading shared libraries: libstdc++.so.6: cannot
open shared object file: No such file or directory

This totally makes sense because the target machine doesn't have the
library "libstdc++.so.6". I did "ldd" and it shows more specific
reason.

libstdc++.so.6 => not found
libm.so.6 => /lib/tls/libm.so.6 (0x0079b000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00689000)
libc.so.6 => /lib/tls/libc.so.6 (0x00111000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x0046c000)

Now, I start falling in a panic because I have so many questions about
next step. I simply thought I might be able to copy the lib file
"libstdc++.so.6" from dev machine to target machine. However, I'm
wornding whether this is right thing to do. Is this problem that
simple? Would it cause some weird problems when a application needs to
use such thing like RTTI or exception handling? Because of these many
doubt, I slightly think about another way of doing this. What about
using "libstdc++.so.5" when I compile the application on the dev
machine?

Now. How can I do this? I have no idea how I can force g++ choose
libstdc++.so.5 instead of libstdc++.so.6? Moreover, I'm also worrying
about whether it is right thing...

or is whole my idea just crap? Please give me any suggestion or idea
before I knock the door of hell...

regards,
Alex Kim
2 Answers

anon

9/30/2008 9:34:00 AM

0

Alexander Dong Back Kim wrote:
[snip]
> Now, I start falling in a panic because I have so many questions about
> next step. I simply thought I might be able to copy the lib file
> "libstdc++.so.6" from dev machine to target machine. However, I'm
> wornding whether this is right thing to do. Is this problem that
> simple? Would it cause some weird problems when a application needs to
> use such thing like RTTI or exception handling? Because of these many
> doubt, I slightly think about another way of doing this. What about
> using "libstdc++.so.5" when I compile the application on the dev
> machine?
>

Search for cross-compiler. You'll have to build one for your target
machine. This might help:
http://www.linuxfromscratch.org/lfs...
Take a look at the chapter 5 how to build the cross compiler

ytrembla

9/30/2008 4:00:00 PM

0

This is off topic for this newsgroup. There are GNu newsgroups and Linux
development newsgroup where this would be more appropriate.

However, what you are trying to do is not quite simple nor totally reliable.
As you can see by the output of ldd, you have moved from .5 to .6 for
libstcdc++but the other libraries are also of a different version.

As an alternative, you could instead make a virtual machine on your dev
machine that is similar to the build machine. It might save you a lot of
hassle.

In article <6a70cf83-46e0-4605-ae88-62e5ac34a9dc@k13g2000hse.googlegroups.com>,
Alexander Dong Back Kim <alexdbkim@gmail.com> wrote:
>Dear all members,
>
>First of all, I apologize I posted such a topic which is not purely
>related with this group. The reason why I posted this is I hope some
>of members this group knows about g++ and they have better idea about
>my problem so please forgive my post.
>
>I have this problem that development machine's default C++ library is
>libstdc++.so.6. of course the OS is linux. However, the target machine
>has libstdc++.so.5 so I copied the library file to dev machine.
>
>Therefore, the dev machine has both version 5 and 6 of libstdc++
>whereas the target machine has only version 5. I wrote and tested the
>following application (not really an application) on the target
>machine.
>
>#include <iostream>
>using namespace std;
>int main() { cout << "hello" << endl; return 0; }
>
>I compile the code with...
>
>target $ g++ main.cpp
>
>It, of course, produces "a.out". I did "ldd" to see what shared (or
>dynamic) library the application links and the result was...
>
> libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x00c25000)
> libm.so.6 => /lib/tls/libm.so.6 (0x00951000)
> libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x006af000)
> libc.so.6 => /lib/tls/libc.so.6 (0x0026c000)
> /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00a42000)
>
>Now I compiled the same application on the dev machine and did the
>same command and the result is...
>
> libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x005e8000)
> libm.so.6 => /lib/tls/libm.so.6 (0x00372000)
> libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00555000)
> libc.so.6 => /lib/tls/libc.so.6 (0x0023e000)
> /lib/ld-linux.so.2 (0x00224000)
>
>If I run the application, which was compiled on the dev machine, on
>the target machine it says an error message...
>
>./a.out: error while loading shared libraries: libstdc++.so.6: cannot
>open shared object file: No such file or directory
>
>This totally makes sense because the target machine doesn't have the
>library "libstdc++.so.6". I did "ldd" and it shows more specific
>reason.
>
> libstdc++.so.6 => not found
> libm.so.6 => /lib/tls/libm.so.6 (0x0079b000)
> libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00689000)
> libc.so.6 => /lib/tls/libc.so.6 (0x00111000)
> /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x0046c000)
>
>Now, I start falling in a panic because I have so many questions about
>next step. I simply thought I might be able to copy the lib file
>"libstdc++.so.6" from dev machine to target machine. However, I'm
>wornding whether this is right thing to do. Is this problem that
>simple? Would it cause some weird problems when a application needs to
>use such thing like RTTI or exception handling? Because of these many
>doubt, I slightly think about another way of doing this. What about
>using "libstdc++.so.5" when I compile the application on the dev
>machine?
>
>Now. How can I do this? I have no idea how I can force g++ choose
>libstdc++.so.5 instead of libstdc++.so.6? Moreover, I'm also worrying
>about whether it is right thing...
>
>or is whole my idea just crap? Please give me any suggestion or idea
>before I knock the door of hell...
>
>regards,
>Alex Kim