2012-07-17 78 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