0

B という ac ライブラリがあり、A という他の c ライブラリに依存しています。Android NDK を介して A を正常にコンパイルして使用できると確信しています。

現在、Android NDK を使用して B ライブラリをコンパイルしようとしています。私は、jni フォルダーを持つ Android プロジェクトを持っています。私のjniフォルダーにはAフォルダーとBフォルダーが含まれており、ライブラリcコードがあります。jni フォルダにはビルド済みのフォルダもあり、そこには a.so ファイル (ビルド済みの A ライブラリ ファイル) が含まれています。

私の問題は、B をビルドできないことです。コンパイルはできますが、リンクできません。誰かが私の間違いを指摘するのを手伝ってくれませんか? A と B は、プロジェクトに使用している一般的な名前であり、実際に使用している名前ではありません。以下に Android.mk ファイルをリストします。

A のビルドに使用される Android.mk ファイル (このファイルには、A コードも含まれていますが、説明した Android プロジェクトには表示されません):

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := libA
LOCAL_SRC_FILES := helloworld.c A/src/fileA.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/A/src
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/A/src
include $(BUILD_SHARED_LIBRARY)

ビルド済みフォルダー内の Android.mk ファイル:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := libA
LOCAL_SRC_FILES := prebuilt/libA.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/A/src
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libB
LOCAL_SRC_FILES := B/src/fileB.c
LOCAL_SHARED_LIBRARIES := libA
include $(BUILD_SHARED_LIBRARY)

ndk-build コマンドを実行すると、最終的な出力は次のようになります。

B/src/fileB.c:15: エラー: 'A_function' への未定義の参照 collect2: ld が 1 の終了ステータスを返しました make: * [obj/local/armeabi/libB.so] エラー 1

4

1 に答える 1

0

B ライブラリ ファイルは実際には A ライブラリにアクセスできますが、その方法がわからないだけです。必要なヘッダー (A ライブラリの .h ファイル) を JNI のサブフォルダーに追加し、次のように指定します。

LOCAL_C_INCLUDES := $(LOCAL_PATH)/your/sub/folder

あなたのBプロジェクト宣言で。

まだ問題があり、A ライブラリを PREBUILT_STATIC として宣言してから、B ライブラリに追加する必要がありました

LOCAL_WHOLE_STATIC_LIBRARIES := libA
于 2012-12-17T15:03:56.377 に答える