我使用了以下内容......
〜/ Development / Android / android-ndk-r8c / build / tools / make-standalone-toolchain.sh --platform = android-9 --install-dir = / Users / me / toolchain
然后我创建以下代码文件......
int main ()
{
return 0;
}
我试过......
<toolchain>/arm-linux-androideabi-gcc test.c
我也试过
<toolchain>/arm-linux-androideabi-gcc --sysroot=<toolchain>/sysroot test.c
两人都回来了......
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 :(得分:20)
为简化起见,只需设置sysroot:
<toolchain>/arm-linux-androideabi-g++ ~/test.c -o ~/test --sysroot=/home/user/android-ndk/platforms/android-9/arch-arm/
答案 1 :(得分:10)
/ arm-linux-androideabi-gcc test.c
你错过了sysroot
。
/ arm-linux-androideabi-gcc --sysroot = / sysroot test.c
这一个,sysroot
是错误的。它应该类似于:
--sysroot=/opt/android-ndk-r9/platforms/android-18/arch-arm
您还需要导出LD(所有工具都应该在路径上):
$ 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
您应该导出工具链中的所有工具:
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
如果您正在使用Autoconf项目,请添加以下内容:
$ 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"
答案 2 :(得分:2)
好的回顾我根据命令制作了Android-9的工具链......
〜/ Development / Android / android-ndk-r8c / build / tools / make-standalone-toolchain.sh --platform = android-9 --install-dir = / tmp / my-toolchain
我跑的时候......
<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
正如你所看到我安装android-9由于某种原因没有这个文件。我重建了android-14,一切正常。任何人都知道这是怎么回事? Bonehead文件移动我的部分?
答案 3 :(得分:0)
这对我有用,我在同一个问题上遇到了这个问题,我试图在NDK中构建gcc-4.8工具链并遇到同样的问题。关于我的情况有点不同的是我在Android设备上构建,这意味着我在libc.so
中拥有仿生库libdl.so
和/system/lib
。配置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
Make文件正在为特定目录-B
设置toolchain/gcc-4.8/gcc/
选项,因此我在/system/lib
到gcc-4.8/gcc
的这两个共享库中创建了符号链接。然后我将crtbegin_dynamic.o
和crtend_android.o
符号链接到编译和安装到toolchain-build / prefix / lib / gcc / arm-linux-androideabi中的目标文件crtbegin.o
和crtend.o
/4.8 / the
find`命令可以帮助您找到它们。
我用来制作符号链接的命令如下所示:
ln -s ../../prefix/lib/gcc/arm-linux-androideabi/4.8/crtend.o crtend_android.o
来自toolchian-build/gcc-4.8/gcc
目录,对我来说是有效的,因为配置指向搜索时,-B
选项make
传递给xgcc
。
我希望能有所帮助。是时候进入libatomic
; )