簡體   English   中英

ARM板的交叉編譯?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM