2013-07-11 21 views
8

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?

+4

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'? –

+0

Nie ma zdefiniowanego "--with-sysroot". gcc to wersja 4.6.3 – trololo

+0

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

Odpowiedz

1

ponieważ zmarnowałem kilka dni Messing z tym przed przeczytaniu komentarzy, mam zamiar pisać artless noise „s komentarze jako odpowiedź:

„uruchomić kompilator z arm-linux-gnueabi-gcc -v i spojrzeć na wartości --with-sysroot; jest to katalog, w którym został skompilowany kompilator. Jeśli ten katalog jest obecny na twoim komputerze (może z innym kompilatorem), to --sysroot może nie działać [; i jeśli robisz nie zobacz --with-sysroot i zamiast tego zobacz --with-libs oznacza, że ​​twój gcc jest skompilowany bez pomocy --sysroot. "

+0

Czy istnieje rozwiązanie? – user1651758

+0

minęło trochę czasu, odkąd z tym pomieszałem, ale jeśli masz '--with-libs' zamiast' --with-sysroot', może to wykorzystasz? lub pobierz inny toolchain lub zbuduj własny. –