2013-05-28 45 views
19

tôi đã sử dụng sau đây ...Android: lỗi: không thể mở crtbegin_dynamic.o: Không có tập tin hoặc thư mục

~/Development/Android/android-ndk-r8c/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=/Users/me/toolchain

Sau đó, tôi tạo ra các tệp mã sau ...

int main() 
{ 
    return 0; 
} 

tôi cố gắng ...

<toolchain>/arm-linux-androideabi-gcc test.c 

tôi cũng đã cố gắng

<toolchain>/arm-linux-androideabi-gcc --sysroot=<toolchain>/sysroot test.c 

Cả hai quay trở lại ...

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

Có cách nào để tôi có thể liên kết thủ công điều này vì có điều gì đó rõ ràng không? – Jackie

+1

Tôi cũng đã thử xuất LD = arm-linux-androideabi-ld nhưng lại không có súc sắc. – Jackie

Trả lời

18

Để làm cho nó đơn giản hơn, chỉ cần đặt các sysroot:

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

Cảm ơn, --sysroot dường như là điều bắt buộc đối với các bản dựng mà không có trình bao bọc ndk-build pesky. –

+0

cảm ơn bạn rất nhiều @BlueSilver phải mất rất nhiều thời gian để tìm ra cái này! – NandhaKumar

+0

Bạn được chào đón. Đó là 4 năm trước :) – BlueSilver

2

Ok nhìn lại tôi đã toolchain của tôi dành cho Android-9 mỗi lệnh ...

~/Development/Android/android-ndk-r8c/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=/tmp/my-toolchain

Khi tôi chạy ...

<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 

Như bạn có thể thấy cài đặt Android-9 của tôi vì một số lý do không có tệp này. Tôi xây dựng lại cho android-14 và tất cả mọi thứ hoạt động tốt. Bất cứ ai cũng có một ý tưởng làm thế nào điều này đã như thế này? Bonehead tập tin di chuyển về phía tôi?

+1

Đây không phải là câu trả lời đúng. BlueSilver's '--sysroot' là những gì còn thiếu trong dòng lệnh gây ra thiếu' crtbegin_dynamic.o'. – jww

10

/arm-linux-androideabi-gcc test.c

Bạn đang thiếu sysroot trong vụ việc này.


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

một này, sysroot là sai. Nó ahould thể tương tự như:

--sysroot=/opt/android-ndk-r9/platforms/android-18/arch-arm 

Bạn cũng cần phải xuất khẩu LD (tất cả các công cụ cần phải vào đường dẫn):

$ 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 

Bạn có lẽ nên xuất khẩu tất cả các công cụ trong toolchain:

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 

Nếu bạn đang làm việc trên một dự án Autoconf, thêm những:

$ 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

Đây là những gì làm việc cho tôi, tôi đã đưa ra câu hỏi này với cùng một vấn đề, tôi đang cố gắng xây dựng chuỗi công cụ gcc-4.8 trong NDK và chạy vào cùng một vấn đề. Điều thats một chút khác nhau mặc dù về tình hình của tôi là tôi đang xây dựng trên một thiết bị Android, có nghĩa là tôi có thư viện Bionic libc.solibdl.so trong /system/lib.Tôi đã nhận được lỗi này khi cấu hình cho 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 

File Make đã thiết lập một tùy chọn -B vào một thư mục đặc biệt toolchain/gcc-4.8/gcc/ vì vậy tôi tạo liên kết tượng trưng từ hai libs chia sẻ trong /system/lib-gcc-4.8/gcc. Sau đó, tôi đã liên kết với các đối tượng crtbegin_dynamic.ocrtend_android.o đối với các tệp đối tượng crtbegin.ocrtend.o nơi được biên dịch và cài đặt vào lệnh findchain-build/prefix/lib/gcc/arm-linux-androideabi/4.8/the find` có thể giúp bạn tìm thấy chúng.

Các lệnh tôi sử dụng để làm các liên kết tượng trưng trông như thế này:

ln -s ../../prefix/lib/gcc/arm-linux-androideabi/4.8/crtend.o crtend_android.o

từ bên trong thư mục toolchian-build/gcc-4.8/gcc, đối với tôi mà làm việc vì thats nơi cấu hình đã được trỏ đến tìm kiếm với -B tùy chọn make qua đến xgcc.

Tôi hy vọng rằng sẽ giúp ai đó. Thời gian để chuyển sang libatomic;)

Các vấn đề liên quan