0

私はこの人が抱えていたものと同様の問題を抱えています:

Android NDK インポート モジュール / コードの再利用

しかし、何らかの理由で、彼らがリストしたソリューションを実装すると、うまくいきません。私のプロジェクトでの唯一の違いは、プロジェクト全体で 1 つのメイクファイルを使用していることです。したがって、モジュールは次のようになります: (... = より多くのファイルまたはパス)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := mod1
LOCAL_C_INCLUDES := $(LOCAL_PATH)/to/c/includes \
... \
LOCAL_SRC_FILES := stringTester.cpp \
... \
include$(BUILD_STATIC_LIBRARY)


include $(CLEAR_VARS)

LOCAL_MODULE := mod2
LOCAL_C_INCLUDES := $(LOCAL_PATH)/to/c/includes \
... \
LOCAL_SRC_FILES := localSourceFile.cpp \
... \
include$(BUILD_STATIC_LIBRARY)

など、さらに 2 つのモジュールがあり、最終的なモジュールでは次のようになります。

include $(CLEAR_VARS)

LOCAL_MODULE := sharedMod
LOCAL_C_INCLUDES := $(LOCAL_PATH)/to/c/includes \
... \
LOCAL_STATIC_LIBRARIES := mod1 mod2 mod3 mod4
... \
include $(BUILD_SHARED_LIBRARY)

そして私のJavaファイルで:

package com.string.test

public class javaTest{

public native String returnAString();

static{
    System.LoadLibrary("sharedMod");
  }
}

私が直面している問題は、stringTester.cpp のメソッドなど、静的ライブラリからメソッドを呼び出すことができないことですが、そのファイルを移動して共有ライブラリを作成するモジュールに含めると、すべてがそのまま機能します。 Java ラッパーは正しく、メソッドは期待どおりのデータを返します。すべてのファイルを共有ライブラリに移動しない唯一の理由は、物理エンジンなどのように、それらが別個の進化するプロジェクトであるためです。

また、各モジュールが独自のメイクファイルを持ち、静的ライブラリのメソッドを呼び出す cpp ファイルが共有ライブラリにあるモジュールを分離しようとしましたが、多くの未解決の参照エラーが発生します。私が試したもう1つの解決策は、LOCAL_WHOLE_STATIC_LIBRARIESを使用して静的ライブラリをロードすることでしたが、未解決の参照エラーも発生しました。

ヘルプや提案をいただければ幸いです。私は途方に暮れていて、障害物にいます。

4

1 に答える 1

1

答えは間違いなく使用することです:

LOCAL_WHOLE_STATIC_LIBRARIES := mod1 mod2 mod3 mod4

他のライブラリを含めることで他の問題に遭遇していましたが、単純なテストケースに縮小すると、上記のマクロを使用すると機能しました。nosさん、ご協力ありがとうございました!!

于 2013-01-24T02:42:12.020 に答える