2013-05-28 175 views
19

...安卓:錯誤:無法打開crtbegin_dynamic.o:我用了下面沒有這樣的文件或目錄

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

有沒有辦法我可以手動連接這個,因爲某些東西顯然是關閉的? – Jackie

+1

我也嘗試導出LD = arm-linux-androideabi-ld,但是再次沒有骰子。 – Jackie

回答

18

,使其更簡單,只需設置SYSROOT:

<toolchain>/arm-linux-androideabi-g++ ~/test.c -o ~/test --sysroot=/home/user/android-ndk/platforms/android-9/arch-arm/ 
+0

謝謝,--sroot似乎是沒有這個討厭的NDK構建包裝的構建真正強制性的東西。 –

+0

非常感謝你@BlueSilver它需要很多時間來找出這一個! – NandhaKumar

+0

不客氣。這是4年前:) – BlueSilver

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,一切正常。任何人都有一個想法如何得到這樣的? Bheadhead文件在我的部分移動?

+1

這不是正確的答案。 BlueSilver的'--sysroot'是命令行中缺少的'crtbegin_dynamic.o'。 – jww

10

/arm-linux-androideabi-gcc test.c

你錯過了在這一個sysroot


/arm-linux-androideabi-gcc --sysroot=/sysroot test.c

這一個,sysroot是錯誤的。這ahould類似於:

--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" 
0

這就是爲我工作,我來到這個問題與同樣的問題,我想在NDK中構建gcc-4.8工具鏈並遇到同樣的問題。雖然關於我的情況有點不同,但我在Android設備上構建,這意味着我在/system/lib中擁有仿生庫libc.solibdl.so

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:配置libgomp當我得到這個錯誤。然後,我將符號鏈接crtbegin_dynamic.ocrtend_android.o添加到目標文件crtbegin.ocrtend.o,其中編譯並安裝到toolchain-build/prefix/lib/gcc/arm-linux-androideabi/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; )

相關問題