0

我遇到了与此人类似的问题:

Android NDK 导入模块/代码复用

但是由于某种原因,当我实施他们列出的解决方案时,它对我不起作用。我在项目中的唯一区别是我为整个项目使用了 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 加载静态库,但这也给了我未解决的参考错误。

任何帮助或建议表示赞赏。我束手无策,遇到了障碍。

4

1 回答 1

1

答案肯定是使用:

LOCAL_WHOLE_STATIC_LIBRARIES := mod1 mod2 mod3 mod4

我在包含其他库时遇到了其他问题,但是当简化为一个简单的测试用例时,使用上面的宏就可以了。感谢 nos 的帮助!!

于 2013-01-24T02:42:12.020 回答