dwe*_*ner 7 gcc android-ndk gdc
我使用android build-gcc.sh脚本与gcc一起编译了gdc,并在build/core/definitions.mk中包含了一个新的存根来处理D语言文件,作为构建过程的一部分.我知道事情正在编译好,但我的问题是链接:
当我构建项目时,我收到此错误:
ld: crtbegin_so.o: No such file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
对于常规的仅限c的项目也是如此.现在我在构建目录中运行了一个快速查找,发现文件(crtbegin_so.o)确实存在于我编译gcc时指定的sysroot中(或者更确切地说,当build-gcc.sh构建它时).
有什么东西我可以寻找找到这个问题的解决方案?
在本地复制文件并直接链接到它们是一个不错的解决方案吗?
为什么ld(或collect2)会尝试将这些包含在gdc(D语言)链接中?
Sam*_*een 12
这个问题也出现在NDK r7c for linux上.
我发现工具链忽略了平台位置($ NDK_ROOT/platforms/android-8/arch-arm/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
因此你的第二点应该成功(你可以做一个符号链接,而不是副本)
注1:这假设使用NDK为API8(Android 2.2)编译代码.请根据您的要求更改正确路径的路径.
注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"
Run Code Online (Sandbox Code Playgroud)
小智 5
我发现添加--sysroot=$(SYSROOT)到编译器选项可以修复错误:
无法打开crtbegin_so.o:没有这样的文件或目录
从我的makefile中...
CC= $(CROSS_COMPILE)gcc -fvisibility-hidded $(INC) $(LIB) -shared
Run Code Online (Sandbox Code Playgroud)
注意:这假设已运行setenv-android.sh来设置环境
$. ./setenv-android.sh
| 归档时间: |
|
| 查看次数: |
14747 次 |
| 最近记录: |