Android:错误:无法打开crtbegin_dynamic.o:没有这样的文件或目录

时间:2013-05-28 15:14:22

标签: android-ndk

我使用了以下内容......

  

〜/ 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

4 个答案:

答案 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/libgcc-4.8/gcc的这两个共享库中创建了符号链接。然后我将crtbegin_dynamic.ocrtend_android.o符号链接到编译和安装到toolchain-build / prefix / lib / gcc / arm-linux-androideabi中的目标文件crtbegin.ocrtend.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; )