Cross-Kompilierung: GCC ignoriert --sysroot
Ich versuche zu cross-kompilieren von Programmen (derzeit avconv von libav) für Nokia N9 Handy mit arm-linux-gnueabi-gcc von Linux Mint 64-bit-repository. Der compiler, der libc-version ist 2.15 und das Telefon hat libc-2.10.1. Sie haben eine Unverträglichkeit, die Mathematik-Bibliothek, die mir einen segmentation Fault, wenn ich kompilieren und starten Sie das Programm avconv von libav.
Ich brauche zu kompilieren und zu linken, die gegen die älteren libc-version, aber ich habe es nicht geschafft, die --sysroot
option zu arbeiten.
Habe ich einen kleinen test-Programm, um zu vermeiden, wiederholt konfigurieren und kompilieren libav.
arm-linux-gnueabi-gcc --sysroot=/opt/CrossCompilation/NokiaN9/ -o output.sysroot hello.c
arm-linux-gnueabi-gcc -o output.nosysroot hello.c
Beide Befehle erzeugen eine identische Ausgabe-Datei. Dies ist, was hello.c
aussieht:
#include <stdio.h>
#include <math.h>
int main() {
printf("Hello, World! Sin = %f\n", sin(0.6451));
}
Das seltsamste daran ist, dass gcc ignoriert völlig die --sysroot
option. Wenn ich passieren eine nicht vorhandene Verzeichnis zu sysroot, es produziert immer noch genau der gleiche output binary:
arm-linux-gnueabi-gcc --sysroot=/foo/bar -o output.foobar hello.c
Es gar nicht beschweren über Fehler. Was ist das problem?
- Führen Sie den compiler mit
arm-linux-gnueabi-gcc -v
und suchen Sie den Wert von --with-sysroot; dies ist das Verzeichnis der compiler erstellt wurde. Wenn Sie dieses Verzeichnis auf Ihrem Computer (vielleicht mit einem anderen compiler), dann die--sysroot
kann nicht funktionieren. Was ist diegcc
version? - Es gibt keine "--with-sysroot" definiert. gcc version 4.6.3
- Aber statt 'grep /usr/arm" findet "--mit-gxx-include-dir=/usr/arm-linux-gnueabi/include/c++/4.6.3", "--includedir=/usr/arm-linux-gnueabi/include", "--with-headers=/usr/arm-linux-gnueabi/include" und "--with-libs=/usr/arm-linux-gnueabi/lib".
--with-libs
bedeutet, dass Ihrgcc
kompiliert wird, ohne--sysroot
unterstützen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
da ich verschwendet ein paar Tagen Herumspielen mit diesem vor dem Lesen der Kommentare, ich werde post artless Lärm's Kommentare als Antwort:
"Führen Sie den compiler mit
arm-linux-gnueabi-gcc -v
und schaue auf den Wert, der--with-sysroot
; dies ist das Verzeichnis der compiler erstellt wurde. Wenn Sie dieses Verzeichnis auf Ihrem Computer (vielleicht mit einem anderen compiler), dann die --sysroot nicht arbeiten kann[; und wenn Sie das tun nicht sehen--with-sysroot
und stattdessen--with-libs
es] bedeutet, dass Ihr gcc kompiliert wird, ohne--sysroot
unterstützen."--with-libs
statt--with-sysroot
verwenden Sie das vielleicht? oder laden Sie eine andere toolchain, oder bauen Sie Ihre eigenen.