0

ビルド済みの静的ライブラリを使用して共有ライブラリをビルドしようとしています。それぞれのAndroid.mkファイルは以下のとおりです。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
 #Include kerne headers in a proper way later on
 #LOCAL_C_INCLUDES:= $(LOCAL_PATH)/../../../../kernel/include
LOCAL_MODULE := sensors.$(TARGET_BOARD_PLATFORM)
LOCAL_MODULE_TAGS := optional

LOCAL_PRELINK_MODULE := false

LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw

LOCAL_STATIC_LIBRARIES := LibFusion_ARM_cpp
 #LOCAL_LDFLAGS := $(LOCAL_PATH)/LibFusion_ARM_cpp.a

LOCAL_SHARED_LIBRARIES := liblog libcutils
 #include any shared library dependencies
LOCAL_LDFLAGS := $(LOCAL_PATH)/libimu.a
LOCAL_PRELINK_MODULE := false
LOCAL_SRC_FILES := sensors_u8500.cpp

include $(BUILD_SHARED_LIBRARY)

フォルダに存在するファイルは、Android.mk、LibFusion_ARM_cpp.a、libimu.a、MEMSAlgLib_eCompass.h、sensor_u8500.cppです。

ビルド中に発生するエラーは以下のとおりです。

**make: *** No rule to make target `out/target/product/u8500/obj/STATIC_LIBRARIES/LibFusion_ARM_cpp_intermediates/LibFusion_ARM_cpp.a', needed by `out/target/product/u8500/obj/SHARED_LIBRARIES/sensors.montblanc_intermediates/LINKED/sensors.montblanc.so'.  Stop.**

ここでの問題は何ですか?

共有ライブラリを構築できません。libsensor.soファイルを生成できないことを意味します。上記のエラーに直面しています。** make:*ターゲットを作成するルールはありません

4

2 に答える 2

0

ビルドシステムが見つからないようLibFusion_ARM_cpp.aです。AFAIKでは、最初にsetasおよびasを使用PREBUILT_STATIC_LIBRARYしてビルド済みのライブラリモジュールを指定する必要があります。これにより、基本的に、指定された静的ライブラリが、ビルドシステムが必要なすべてのモジュールを検索するデフォルトのディレクトリにコピーされます。LibFusion_ARM_cpp.aLOCAL_SRC_FILESLOCAL_MODULELibFusion_ARM_cpp

于 2012-06-21T21:44:32.357 に答える
0

このケースを理解するために、次の 2 つのことを行いました。

A. 上記の make ファイルに、この .a ファイルが確実にビルドにコピーされるように、以下を追加しました。

include $(CLEAR_VARS)
LOCAL_MODULE := LibFusion_ARM
LOCAL_SRC_FILES := LibFusion_ARM_cpp.a
include $(BUILD_STATIC_LIBRARY)

mm -n, コマンドを使用してビルドするとrm -f ...、LibFusion_ARM.a のこの奇妙なステートメントが表示されます。もちろん、ビルドは失敗し、STATIC LIB.

mkdir -p out/target/product/u8500/obj/STATIC_LIBRARIES/LibFusion_ARM_intermediates/  
rm -f out/target/product/u8500/obj/STATIC_LIBRARIES/LibFusion_ARM_intermediates/LibFusion_ARM.a  
echo "target StaticLib: LibFusion_ARM (out/target/product/u8500/obj/STATIC_LIBRARIES/LibFusion_ARM_intermediates/LibFusion_ARM.a)"
mkdir -p out/target/product/u8500/obj/SHARED_LIBRARIES/sensors.montblanc_intermediates/LINKED/
.
.

なぜこのような削除が行われるのですか? 私はわかりません。これが問題の原因です。提案を提供してください。

B. make ファイルに以下の行を追加しました。

include $(CLEAR_VARS)
LOCAL_MODULE := LibFusion_ARM
LOCAL_SRC_FILES := LibFusion_ARM_cpp.a
include $(PREBUILT_STATIC_LIBRARY)

以下のエラーが表示されます。

make: *** No rule to make target `out/target/product/u8500/obj/STATIC_LIBRARIES/LibFusion_ARM_intermediates/LibFusion_ARM.a', needed by `out/target/product/u8500/obj/SHARED_LIBRARIES/sensors.montblanc_intermediates/LINKED/sensors.montblanc.so'.
Stop.

明らかに 2 番目のケースでは、ファイル LibFusion_ARM がコピーされていませobj/STATIC_LIBRARIES/LibFusion_ARM_intermediatesん (ディレクトリが作成されていません)。強調する必要はありませんが、ファイル LibFusion_ARM_cpp.a を LibFusion_ARM.a として手動でコピーすると、ビルドが完了します。

于 2012-06-28T12:34:21.307 に答える