4

我正在尝试在 /sbin 中生成类似于 adbd 的可执行文件。

我希望拥有的可执行文件是 ARM 格式的 iwlist,类型是静态的。

我在AndroidSourceCode/external中添加文件夹并执行“mm”命令编译

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

上面的 make 文件实际上是通过生成 iwlist 可执行文件来工作的

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

但是,我正在寻找“静态链接”并且我在想“LOCAL_FORCE_STATIC_EXECUTABLE := true”这行应该可以帮助我静态地制作这个可执行文件。

不幸的是,它没有。

如果你知道怎么做,请指导我。

提前致谢。

4

1 回答 1

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
于 2012-07-23T16:56:37.820 回答