2012-07-17 41 views
4

我正在嘗試生成類似於/ sbin中的adbd的可執行文件。Android makefile生成靜態可執行文件

我想要的可執行文件是ARM格式的iwlist,類型是靜態的。

我增加了文件夾中的AndroidSourceCode /外部,執行「毫米」命令編譯

LOCAL_PATH := $(call my-dir) 
ifneq ($(TARGET_SIMULATOR),true) 
include $(CLEAR_VARS) 

LOCAL_MODULE := libiw 

LOCAL_MODULE_TAGS := eng 

LOCAL_SRC_FILES := iwlib.c 

LOCAL_C_INCLUDE += LOCAL_PATH 

LOCAL_PRELINK_MODULE := false 

include $(BUILD_SHARED_LIBRARY) 

#================================================ 
include $(CLEAR_VARS) 
LOCAL_FORCE_STATIC_EXECUTABLE := true 
LOCAL_MODULE_TAGS := eng 
LOCAL_SRC_FILES := iwlist.c 

LOCAL_SHARED_LIBRARIES := libiw 
LOCAL_MODULE := iwlist 

include $(BUILD_EXECUTABLE) 
#================================================ 

endif # !TARGET_SIMULATOR 

上述化妝文件實際上通過生成iwlist可執行與

iwlist: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses 
shared libs), stripped 

然而作品,我正在尋找「靜態鏈接」,我想「LOCAL_FORCE_STATIC_EXECUTABLE:= true」這行應該幫助我靜態地執行這個可執行文件。

不幸的是,它不。

請告訴我,如果你知道如何做到這一點。

在此先感謝。

+0

的人?這使我困惑了幾天...... – Sam 2012-07-17 05:34:42

+0

嘗試構建靜態庫而不是共享庫來靜態編譯。 將{include $(BUILD_SHARED_LIBRARY)}行更改爲{include $(BUILD_STATIC_LIBRARY)} – 2017-11-09 09:05:52

回答

1

我有一個類似的問題,但我無法使用Android工具鏈靜態鏈接任何文件。 您可以使用其他工具鏈。我嘗試了linaro的工具鏈,它工作正常。 你可以在這裏下載: https://wiki.linaro.org/WorkingGroups/ToolChain

我下載了4.7版本,解壓文件放在我的主目錄。

~/gcc-linaro-arm-linux-gnueabihf-2012.06-20120625_linux/bin/arm-linux-gnueabihf-gcc -static -s hello.c -o hello 

當然,我建議你把那個bin目錄在你的路徑: 要編譯的那樣容易。

這將創建一個靜態鏈接文件:

# file hello 
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.31, stripped 
+0

感謝您的回答Melopsitaco。這對我來說真的很有幫助。但是,iwlist可執行文件依賴於libiw,你知道如何將它們一起編譯嗎?謝謝。 – Sam 2012-07-24 03:33:23

+0

如果您有ARM的libiw.so和libiw.a,您可以一起編譯,則必須使用-L和-liw來包含庫目錄以使用該庫。但我沒有在Android交叉編譯器中找到ARM libiw ... – melopsitaco 2012-07-24 21:52:24

+0

感謝您的有用答案! – Sam 2012-07-27 00:48:31