it-swarm.com.de

Android: Fehler: crtbegin_dynamic.o kann nicht geöffnet werden: Keine Datei oder Verzeichnis

Ich habe folgendes verwendet ...

~/Entwicklung/Android/Android-ndk-r8c/build/tools/make-standalone-toolchain.sh --platform = Android-9 --install-dir =/Benutzer/ich/Toolchain

Dann erstelle ich die folgende Codedatei ...

int main ()
{
  return 0;
}

Ich habe es versucht ...

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

Ich habe es auch versucht

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

Beide kommen zurück ...

 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
22
Jackie

Um es einfacher zu machen, setzen Sie einfach die Sysroot:

<toolchain>/arm-linux-androideabi-g++ ~/test.c -o ~/test --sysroot=/home/user/Android-ndk/platforms/Android-9/Arch-arm/
20
BlueSilver

/ arm-linux-androideabi-gcc test.c

In diesem Fall fehlt sysroot.


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

Dieser, sysroot, ist falsch. Es sollte ähnlich sein:

--sysroot=/opt/Android-ndk-r9/platforms/Android-18/Arch-arm

Sie müssen auch LD exportieren (alle Werkzeuge sollten sich im Pfad befinden):

$ 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

Sie sollten wahrscheinlich alle Werkzeuge in der Toolchain exportieren:

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

Wenn Sie an einem Autoconf-Projekt arbeiten, fügen Sie Folgendes hinzu:

$ 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"
10
jww

Ok zurückblickend habe ich meine Toolchain für Android-9 per Befehl gemacht ...

~/Entwicklung/Android/Android-ndk-r8c/build/tools/make-standalone-toolchain.sh --platform = Android-9 --install-dir =/tmp/meine-toolchain

Als ich rannte ...

<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

Wie Sie sehen, hat meine Installation von Android-9 aus irgendeinem Grund diese Datei nicht. Ich habe für Android-14 umgebaut und alles funktioniert gut. Hat jemand eine Idee wie das so wurde? Bonehead-Datei von meiner Seite verschieben?

2
Jackie

Das hat bei mir funktioniert, ich kam zu dieser Frage mit dem gleichen Problem, ich versuche, die gcc-4.8-Toolchain im NDK aufzubauen und stieß auf das gleiche Problem. Die Sache, die in meiner Situation etwas anders ist, ist, dass ich auf einem Android-Gerät aufbaue, was bedeutet, dass ich die bionische Bibliothek libc.so und libdl.so in /system/lib habe. Bei der Konfiguration von libgomp wurde diese Fehlermeldung angezeigt:

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

In der Make-Datei wurde eine -B-Option für ein bestimmtes Verzeichnis toolchain/gcc-4.8/gcc/ festgelegt. Daher erstellte ich Symlinks aus diesen beiden gemeinsam genutzten Bibliotheken in /system/lib nach gcc-4.8/gcc. Dann habe ich crtbegin_dynamic.o und crtend_Android.o mit den Objektdateien crtbegin.o und crtend.o verknüpft, die kompiliert und im Befehl toolchain-build/prefix/lib/gcc/arm-linux-androideabi/4.8/thefind` installiert wurden.

Die Befehle, mit denen ich die Symlinks erstellt habe, sahen folgendermaßen aus:

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

aus dem toolchian-build/gcc-4.8/gcc-Verzeichnis, das für mich funktionierte, weil die Konfiguration darauf zeigte, dass die Konfiguration mit der -B-Option make an xgcc übergeben wurde.

Ich hoffe das hilft jemandem. Zeit, um zu libatomic zu gelangen; )

0