Hallo,
wegen anhaltender Probleme mit einem Crosscompiler bin ich etwas tiefer
gegangen und habe nun festgestellt: Ich kompiliere ein einfaches
Hallo-Welt-Programm (mit arm-linux-gnueabi-g++):
1 | #include <iostream>
|
2 |
|
3 | using namespace std;
|
4 |
|
5 | int main(void) {
|
6 | cout << "This is a cross compiler hello world!" << endl;
|
7 | }
|
lasse es auf dem Target laufen und es funktioniert. Dann füge ich hinzu:
Diese Kompilat erzeugt auf dem Target:
1 | ./Testtt: /usr/lib/arm-linux-gnueabi/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./Testtt)
|
2 | libstdc++.so.6 => /usr/lib/arm-linux-gnueabi/libstdc++.so.6 (0xb6eb7000)
|
3 | libgcc_s.so.1 => /lib/arm-linux-gnueabi/libgcc_s.so.1 (0xb6e87000)
|
4 | libc.so.6 => /lib/arm-linux-gnueabi/libc.so.6 (0xb6d3e000)
|
5 | /lib/ld-linux.so.3 (0x7f5a8000)
|
6 | libm.so.6 => /lib/arm-linux-gnueabi/libm.so.6 (0xb6c8d000)
|
Wonach und wie unterscheidet der Linker (oder wer?) welche
Mindestversion gebraucht wird, und wieso wird gerade beim verwenden von
Strings die neue (auf dem Target nicht vorhandene) benötigt?
Auch die Version ohne den string "zieht" schon die libstdc++ mit an:
1 | ldd Testtt
|
2 | libstdc++.so.6 => /usr/lib/arm-linux-gnueabi/libstdc++.so.6 (0xb6efe000)
|
3 | libgcc_s.so.1 => /lib/arm-linux-gnueabi/libgcc_s.so.1 (0xb6ece000)
|
4 | libc.so.6 => /lib/arm-linux-gnueabi/libc.so.6 (0xb6d85000)
|
5 | libm.so.6 => /lib/arm-linux-gnueabi/libm.so.6 (0xb6cd4000)
|
6 | /lib/ld-linux.so.3 (0x7f5de000)
|
Verzweifelt
Werner