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
Search for cross-compiler. You'll have to build one for your target
machine. This might help:
http://www.linuxfromscratch.org/lfs/read.html
Take a look at the chapter 5 how to build the cross compiler
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...@k13g2000hse.googlegroups.com>,