我遇到的问题与这个人的问题类似:
Android NDK import-module / code reuse
但由于某种原因,当我实施他们列出的解决方案时,它对我不起作用。我在项目中唯一的区别是我在整个项目中使用了1个makefile。因此,模块看起来像这样:(... =更多文件或路径)
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包装器是正确的,方法返回我期望的数据。我没有将所有文件移动到共享库中的唯一原因是它们是独立的和不断发展的项目,例如我们的物理引擎等等。
我也尝试将模块与每个具有自己的makefile的模块分开,并且在共享库中有一个调用静态库中的方法的cpp文件但是我会得到很多未解决的引用失败。我尝试过的另一个解决方案是使用LOCAL_WHOLE_STATIC_LIBRARIES来加载静态库,但这也给了我未解决的引用错误。
任何帮助或建议表示赞赏。我在我的智慧结束,并在路障。
答案 0 :(得分:1)
答案肯定是使用:
LOCAL_WHOLE_STATIC_LIBRARIES := mod1 mod2 mod3 mod4
我遇到了包含其他库的其他问题但是当简化为一个简单的测试用例时,使用上面的宏工作。感谢nos的帮助!!