[英]Cross compilation for ARM board?
我試圖交叉編譯一個簡單的hello程序作為獨立的應用程序,它將在arm板上作為二進制文件運行,但我在arm板上運行hello binary時遇到問題。
以下是我遵循的步驟: -
make ARCH = arm CROSS_COMPILE = arm-linux-gnueabi- hello
現在你好是成功塑造時,是否使用文件命令打招呼的文件類型: -
$ file hello hello:ELF 32位LSB可執行文件,ARM,版本1(SYSV),靜態鏈接,用於GNU / Linux 2.6.31,BuildID [sha1] = 0x68edccf6dba1057774e3d7853914578e53889a75,未剝離
當我在Android Linux手機中將這個二進制文件推送到/ data文件夾下時
1- adb push hello / data
2-chmod 777 / data /你好
3-。/ hello(但是這里你好不能運行)
有人可以告訴我在電話上編譯或運行二進制文件時我犯的錯誤。
我在運行程序時收到奇怪的錯誤消息,如下所示: -
root @ xxx:/ data#。/ hello
。/你好
打開失敗:沒有這樣的文件或目錄
1 | root @ xxx:/ data #sh你好
你好
你好[1]:語法錯誤:'☺üê4┤¡♣♣☻4'意外
1 | root @ xxx:/ data#
Android需要針對本機庫的位置獨立代碼 。 嘗試將-pie -fpie標志添加到編譯器。 另一個問題可能是@Joe所描述的問題。 在Android上,有一個仿生標准庫。 如果你的“hello”程序沒有使用任何標准調用,你可以嘗試編譯沒有標准庫(使用NDK中提供的工具鏈):
arm-linux-androideabi-g++ -pie -fpie -nostdlib hello.c -o hello
但更好的選擇是創建一個簡單的Android.mk文件:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= hello.c
LOCAL_MODULE_TAGS:= test
LOCAL_MODULE:= hello
include $(BUILD_EXECUTABLE)
並通過發出mm命令在已經設置的Android SDK中使用它。
如果您想使用標准庫並且出於某種原因不想使用Android.mk,那么您可以下載(並構建)所有Android源並將包含路徑傳遞給gcc(示例):
arm-linux-androideabi-g++ -pie -fpie --sysroot=<path_to_android_sources>/out/target/product/<product>/obj/
-I<path_to_android_sources>/bionic/libc/arch-arm/include/ -I<path_to_android_sources>/bionic/libc/include/
-<path_to_android_sources>/bionic/libstdc++/include/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.