代码之家  ›  专栏  ›  技术社区  ›  Sam

Android生成文件以生成静态可执行文件

  •  4
  • Sam  · 技术社区  · 12 年前

    我正在尝试在/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”这一行应该可以帮助我静态地执行此操作。

    不幸的是,事实并非如此。

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

    提前谢谢。

    1 回复  |  直到 12 年前
        1
  •  1
  •   melopsitaco    12 年前

    我也有类似的问题,但我无法使用Android工具链编译静态链接的任何文件。 你可以使用另一个工具链。我试用了利纳罗的工具链,效果很好。 您可以在此处下载: 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