Próbuję krzyżować programy kompilujące (obecnie avconv z libav) dla telefonu Nokia N9 za pomocą arm-linux-gnueabi-gcc z 64-bitowego repozytorium Linux Mint. Wersja libc kompilatora to 2.15, a telefon ma libc-2.10.1. Mają niekompatybilność w bibliotece matematycznej, co daje mi segfault, kiedy kompiluję i uruchamiam program avconv z libav.Kompilacja krzyżowa: ignoruje GCC --sysroot
Musiałbym skompilować i połączyć ze starszą wersją biblioteki libc, ale nie udało mi się uruchomić opcji --sysroot
.
Zrobiłem mały program testowy, aby uniknąć wielokrotnego konfigurowania i kompilowania libav.
arm-linux-gnueabi-gcc --sysroot=/opt/CrossCompilation/NokiaN9/ -o output.sysroot hello.c
arm-linux-gnueabi-gcc -o output.nosysroot hello.c
Obie komendy tworzą identyczny plik wyjściowy. To co hello.c
wygląda następująco:
#include <stdio.h>
#include <math.h>
int main() {
printf("Hello, World! Sin = %f\n", sin(0.6451));
}
Najdziwniejsze jest to, że gcc całkowicie ignoruje opcję --sysroot
. Gdybym przejść do katalogu nieistniejącego sysroot, nadal produkuje dokładnie takie samo wyjście binarne:
arm-linux-gnueabi-gcc --sysroot=/foo/bar -o output.foobar hello.c
To nawet nie narzekać żadnych błędów. Jaki jest problem?
Uruchom kompilator za pomocą 'arm-linux-gnueabi-gcc -v' i spójrz na wartość ** - with-sysroot **; jest to katalog, z którego zbudowano kompilator. Jeśli ten katalog jest obecny na twoim komputerze (może z innym kompilatorem), '--sysroot' może nie działać. Czym jest wersja 'gcc'? –
Nie ma zdefiniowanego "--with-sysroot". gcc to wersja 4.6.3 – trololo
Zamiast tego "grep/usr/arm" znajduje "--with-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 "i" --with-libs =/usr/arm-linux-gnueabi/lib ". – trololo