2013-05-28 16 views
19

użyłem następujących ...Android: błąd: nie można otworzyć crtbegin_dynamic.o: Nie ma takiego pliku lub katalogu

~/Development/Android/android-ndk-r8c/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=/Users/me/toolchain

Potem utworzyć następujący plik kod ...

int main() 
{ 
    return 0; 
} 

I próbowałem ...

<toolchain>/arm-linux-androideabi-gcc test.c 

próbowałem też

<toolchain>/arm-linux-androideabi-gcc --sysroot=<toolchain>/sysroot test.c 

Zarówno wrócić ...

toolchain/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory 
+0

Czy istnieje sposób, aby ręcznie połączyć to, ponieważ coś jest oczywiście wyłączone? – Jackie

+1

Próbowałem również eksportować LD = arm-linux-androideabi-ld, ale znowu nie kości. – Jackie

Odpowiedz

18

Żeby było prościej, wystarczy ustawić sysroot:

<toolchain>/arm-linux-androideabi-g++ ~/test.c -o ~/test --sysroot=/home/user/android-ndk/platforms/android-9/arch-arm/ 
+0

Dzięki, --sysroot wydaje się być naprawdę obowiązkową rzeczą dla kompilacji bez tej brzydkiej otoki ndk-build. –

+0

Bardzo dziękuję @BlueSilver, aby dowiedzieć się, to zajmuje dużo czasu! – NandhaKumar

+0

Nie ma za co. To było 4 lata temu :) – BlueSilver

2

Ok patrząc wstecz Zrobiłem toolchain dla Androida-9 za pomocą polecenia ...

~/Development/Android/android-ndk-r8c/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=/tmp/my-toolchain

Kiedy wpadłem ...

<install>/android-ndk-r8c$ find ./ -name crtbegin_dynamic* 
.//platforms/android-14/arch-arm/usr/lib/crtbegin_dynamic.o 
.//platforms/android-14/arch-mips/usr/lib/crtbegin_dynamic.o 
.//platforms/android-14/arch-x86/usr/lib/crtbegin_dynamic.o 
.//platforms/android-3/arch-arm/usr/lib/crtbegin_dynamic.o 
.//platforms/android-4/arch-arm/usr/lib/crtbegin_dynamic.o 
.//platforms/android-5/arch-arm/usr/lib/crtbegin_dynamic.o 
.//platforms/android-8/arch-arm/usr/lib/crtbegin_dynamic.o 
.//platforms/android-9/arch-mips/usr/lib/crtbegin_dynamic.o 
.//platforms/android-9/arch-x86/usr/lib/crtbegin_dynamic.o 

Jak widać moja instalacja Androida-9 z jakiegoś powodu nie ma tego pliku. Przebudowałem dla Androida-14 i wszystko działa dobrze. Ktoś ma pomysł, jak to się stało? Plik Bonehead przenosi się z mojej strony?

+1

To nie jest poprawna odpowiedź. W wierszu poleceń brakuje "--sysroot" programu BlueSilver, który spowodował brakujący 'crtbegin_dynamic.o'. – jww

10

/arm-linux-androideabi-gcc test.c

Brakuje sysroot w ten jeden.


/arm-linux-androideabi-gcc --sysroot=/sysroot test.c

Ten jeden, sysroot jest źle. ahould być podobny do:

--sysroot=/opt/android-ndk-r9/platforms/android-18/arch-arm 

Trzeba także eksportować LD (wszystkie narzędzia powinny być na ścieżce):

$ echo $PATH 
/opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin: 
/opt/android-sdk-macosx/tools/:/opt/android-sdk-macosx/platform-tools/:/opt/local/bin: 
/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin 
$ echo $LD 
arm-linux-androideabi-ld 

Powinieneś raczej eksportować wszystkie narzędzia w toolchain:

export CPP=arm-linux-androideabi-cpp 
export CC=arm-linux-androideabi-gcc 
export CXX=arm-linux-androideabi-g++ 
export LD=arm-linux-androideabi-ld 
export AS=arm-linux-androideabi-as 
export AR=arm-linux-androideabi-ar 
export RANLIB=arm-linux-androideabi-ranlib 

Jeśli pracujesz nad projektem autoconf, dodać te:

$ echo $ANDROID_SYSROOT 
/opt/android-ndk-r9/platforms/android-18/arch-arm 
export CPPFLAGS="--sysroot=$ANDROID_SYSROOT" 
export CFLAGS="--sysroot=$ANDROID_SYSROOT" 
export CXXFLAGS="--sysroot=$ANDROID_SYSROOT" 
0

To jest to, co sprawdziło się, doszedłem do tego pytania z tym samym problemem, próbuję zbudować toolchain gcc-4.8 w NDK i wpadłem na ten sam problem. Rzecz w tym, że moja sytuacja jest nieco inna, ale buduję na urządzeniu z Androidem, co oznacza, że ​​mam bibliotekę Bionic libc.so i libdl.so w /system/lib.I był już ten błąd podczas konfigurowania dla libgomp:

toolchain-build/binutils-2.23/ld/ld-new: cannot find crtbegin_dynamic.o: No such file or directory 
toolchain-build/binutils-2.23/ld/ld-new: cannot find -lc 
toolchain-build/binutils-2.23/ld/ld-new: cannot find -ldl 
toolchain-build/binutils-2.23/ld/ld-new: cannot find crtend_android.o: No such file or directory 

Plik Producent zachodziło opcję -B do konkretnego katalogu toolchain/gcc-4.8/gcc/ więc stworzyłem dowiązania z tymi dwoma wspólnymi bibliotekami w /system/lib do gcc-4.8/gcc. Następnie podłączyłem do plików obiektów crtbegin_dynamic.o i crtend_android.o pliki, w których skompilowane i zainstalowane w toolchain-build/prefix/lib/gcc/arm-linux-androideabi/4.8/the find` polecenie może pomóc ci je znaleźć.

Komendy I użyte do wytworzenia dowiązania wyglądał następująco:

ln -s ../../prefix/lib/gcc/arm-linux-androideabi/4.8/crtend.o crtend_android.o

od wewnątrz katalogu toolchian-build/gcc-4.8/gcc, dla mnie to działa, gdyż to gdzie konfiguracja została skierowanymi do wyszukiwania z opcją -Bmake przeszedł do xgcc.

Mam nadzieję, że komuś pomaga. Czas przejść do libatomic;)

Powiązane problemy