Reputation: 23577
I used the following...
~/Development/Android/android-ndk-r8c/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=/Users/me/toolchain
Then I create the following code file...
int main ()
{
return 0;
}
I tried ...
<toolchain>/arm-linux-androideabi-gcc test.c
I also tried
<toolchain>/arm-linux-androideabi-gcc --sysroot=<toolchain>/sysroot test.c
Both come back...
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
Upvotes: 26
Views: 36686
Reputation: 2092
Also -B
option set to a folder path with crtbegin*.o
crtend*.o
helps.
Upvotes: 0
Reputation: 697
This is what worked for me, I came to this question with the same issue, I am trying to build the gcc-4.8 toolchain in the NDK and ran into the same problem. The thing thats a bit different though about my situation is I am building on an Android device, which means I have the Bionic library libc.so
and libdl.so
in /system/lib
. I was getting this error when configuring for 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
The Make file was setting a -B
option to a particular directory toolchain/gcc-4.8/gcc/
so I created symlinks from those two shared libs in /system/lib
to gcc-4.8/gcc
. Then I symlinked crtbegin_dynamic.o
and crtend_android.o
to the object files crtbegin.o
and crtend.o
that where compiled and installed into toolchain-build/prefix/lib/gcc/arm-linux-androideabi/4.8/the
find` command can help you find them.
The commands I used to make the symlinks looked like this:
ln -s ../../prefix/lib/gcc/arm-linux-androideabi/4.8/crtend.o crtend_android.o
from within the toolchian-build/gcc-4.8/gcc
directory, for me that worked because thats where the configuration was pointing to search with the -B
option make
passed to xgcc
.
I hope that helps someone. Time to move on to libatomic
; )
Upvotes: 1
Reputation: 102346
/arm-linux-androideabi-gcc test.c
You're missing sysroot
in this one.
/arm-linux-androideabi-gcc --sysroot=/sysroot test.c
This one, sysroot
is wrong. It ahould be similar to:
--sysroot=/opt/android-ndk-r9/platforms/android-18/arch-arm
You also need to export LD (all the tools should be on path):
$ 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
You should probably export all the tools in the 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
If you are working on an Autoconf project, add these:
$ 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"
Upvotes: 14
Reputation: 1052
To make it simpler, just set the sysroot:
<toolchain>/arm-linux-androideabi-g++ ~/test.c -o ~/test --sysroot=/home/user/android-ndk/platforms/android-9/arch-arm/
Upvotes: 25
Reputation: 23577
Ok looking back I made my toolchain for Android-9 per the command...
~/Development/Android/android-ndk-r8c/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=/tmp/my-toolchain
When I ran...
<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
As you can see my install of android-9 for some reason does not have this file. I rebuilt for android-14 and everything works fine. Anyone have an idea how this got like this? Bonehead file move on my part?
Upvotes: 2