2011-07-30 34 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" 

該項目被編譯和鏈接成功。