2011-07-30 84 views
6

我已经一起用gcc使用了Android build-gcc.sh脚本编译GDC,并已包括在建/内核的新型存根的Android工具链(定制)/ definitions.mk处理d语言文件作为构建过程的一部分。我知道事情是在这一点上编译OK,但我的问题是连接:crtbegin_so.o失踪

当我建一个项目,我得到这个错误:

ld: crtbegin_so.o: No such file: No such file or directory 

这对于常规的C-唯一项目是也是如此。现在我跑了快在我的生成目录中找到,并发现该文件(crtbegin_so.o)不指定我当我的gcc编译(或者说,当build-gcc.sh建吧)SYSROOT中存在。

  • 我可以寻找哪些东西来寻找解决这个问题的方法?

  • 会在本地复制文件,并直接链接到他们是在 临时一个体面的解决方案?

  • 为什么会LD(或collect2)试图以包括这些的GDC(d语言)联动?

+1

http://stackoverflow.com/questions/7400124/cant-run-sample-rhodes-application为我解决:) – jobwat

回答

10

问题上NDK R7C为Linux出现为好。

我发现工具链忽略了平台位置($ NDK_ROOT /平台/ Android的8 /弓臂/ usr/lib中/)并搜索它在工具链的路径,这是不正确。

然而,由于工具链还搜索在当前目录下的文件,一个解决方案是符号链接正确的平台crtbegin_so.o和crtend_so.o到源代码目录:

cd src && ln -s NDK_ROOT/platforms/android-8/arch-arm/usr/lib/crtbegin_so.a

cd src && ln -s NDK_ROOT/platforms/android-8/arch-arm/usr/lib/crtend_so.a

因此,你的第二点,应该制定出(在这里你可以做一个符号链接,而不是复制)

0使用NDK这假定该代码被编译为API8(Android 2.2的):

注1。请改变路径,以正确的路径按照您的要求。

注2:使用配置标志:

./configure \ 
--host=arm-linux-androideabi \ 
CC=arm-linux-androideabi-gcc \ 
CPPFLAGS="-I$NDK_ROOT/platforms/android-8/arch-arm/usr/include/" \ 
CFLAGS="-nostdlib" \ 
LDFLAGS="-Wl,-rpath-link=$NDK_ROOT/platforms/android-8/arch-arm/usr/lib/ -L$NDK_ROOT/platforms/android-8/arch-arm/usr/lib/" \ 
LIBS="-lc" 
+0

这太棒了,谢谢!现在我可以建立对Android工具链的gdc。 – dwerner

0

我面临着同样的问题在两个不同的情况:

  1. 使用android-cmake项目在建设boost为Android
  2. 期间。

一次,我已经切换到standalone toolchain问题了,这里是命令的例子准备standalone toolchain

$NDK_ROOT/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=android-toolchain --ndk-dir=$NDK_ROOT --system=darwin-x86_64 --toolchain=arm-linux-androideabi-4.9 

加速特定

您需要在您的jam

指定 --sysroot几次升压
<compileflags>--sysroot=$NDK_ROOT/platforms/android-9/arch-arm 
<linkflags>--sysroot=$NDK_ROOT/platforms/android-9/arch-arm 
2

我发现,添加--sysroot=$(SYSROOT)编译器选项修正错误:

cannot open crtbegin_so.o: No such file or directory

从我的makefile ...

CC= $(CROSS_COMPILE)gcc -fvisibility-hidded $(INC) $(LIB) -shared 

注:此假定setenv-android.sh已运行来设置环境
$. ./setenv-android.sh

1

在我的情况下报价从SYSROOT路径丢失。 当我改变

--sysroot=${ANDROID_NDK}\platforms\android-17\arch-arm 

--sysroot="${ANDROID_NDK}\platforms\android-17\arch-arm" 

该项目被编译和链接成功。