Tôi đang cố gắng xây dựng một ứng dụng HelloWorld đơn giản và chạy nó trên Genymotion. Hệ thống xây dựng của tôi là Ubuntu 14.04 64bit. Tôi đã cài đặt Android SDK (r22.6.2) và NDK (r9d).Cách biên dịch chương trình C cho Genymotion (Android x86)
nỗ lực đầu tiên: Xây dựng bằng cách sử dụng được xây dựng sẵn NDK ARM toolchain
TOOLCHAIN = $NDK/toolchains/arm-linux-androideabi-4.8
$TOOLCHAIN/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=$PLATFORM hello.c -o hello
adb push hello /sdcard/
./hello
tôi nhận được một lỗi
/system/bin/sh: ./Hello: not executable: magic 7F45
Sau khi thực hiện một số nghiên cứu, tôi nhanh chóng nhận ra Genymotion có x86 vòm thay vì ARM
Lần thử thứ hai: Tạo bằng công cụ độc lập x86 Chuỗi
Make x86 standlone toolchain đầu tiên
cd $NDK/build/tools ./make-standalone-toolchain.sh --arch=x86 --platform=android-19 --install-dir=/tmp/android-toolchain --ndk-dir=../../. --system=linux-x86_64
Build Xin chào sử dụng toolchain
cd tmp/android-toolchain/bin ./i686-linux-android-gcc -o Hello -c hello.c
Run Xin chào trên Genymotion
adb push hello /data/local/tmp adb shell cd /data/local/tmp ./hello /system/bin/sh: ./Hello: not executable: magic 7F45
Ran uname -a
trên máy genymotion. Ran file Hello
trên thực thi
Vì vậy, nó phải là một trận đấu.
Vẫn gặp lỗi tương tự. Sẽ thực sự đánh giá cao nếu ai đó có thể làm sáng tỏ.
Chỉnh sửa 1: Đã cố gắng chạy tệp thực thi trong/data/local/tmp thay vì/sdcard /. Vẫn cho cùng một lỗi.
Chỉnh sửa 2: Ran uname
trên hệ thống genymotion và file
trên thực thi để xem chúng có khớp không.
Tôi tin rằng có sự nhầm lẫn: bạn đẩy 'hello' vào'/sdcard', nhưng chạy 'Hello' từ'/'(thư mục gốc). Ở bất kỳ mức nào, Android gắn thẻ/sdcard và bộ nhớ ngoài khác là không thể thực thi, vì lý do bảo mật. Do đó, nếu bạn muốn đẩy và chạy tệp thực thi của mình, hãy sử dụng một số thư mục khác. '/ data/local/tmp' thường là một lựa chọn tốt. –
Tôi vừa thử chạy tệp thực thi trong/data/local/tmp. Vẫn cho tôi lỗi tương tự – HBZ
Bạn có chạy 'chmod 700/data/local/tmp/hello' không? –