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 に答える