无法调用 Android 静态库方法
Android static library method cannot be called
我遇到了与此人类似的问题:
安卓 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 加载静态库,但这也给了我未解决的引用错误。
任何帮助或建议不胜感激。我处于智慧的尽头,也处于一个障碍。
答案肯定是使用:
LOCAL_WHOLE_STATIC_LIBRARIES := mod1 mod2 mod3 mod4
我在包含其他库时遇到了其他问题,但是当简化为一个简单的测试用例时,使用上述宏起作用了。感谢诺斯的帮助!!
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 在静态库中嵌入类方法
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 尝试了解在导入的静态方法上使用删除方法时的错误
- 如何通过命名空间调用非静态方法
- 如何在没有实例的情况下获取非静态方法的类型?
- 调用从模板派生的类的静态方法,而不指定模板
- 类无法访问自己的私有静态 constexpr 方法 - Clang bug?
- 如何在不使用静态矩形方法的情况下创建 IDOMPathGeometryPtr?
- 如何在 c++ 中异步调用静态方法?
- C++ 将静态方法转换为简单方法
- 静态 std::map instatiation 在类的方法中调用构造函数吗?
- 从另一个标头中的标头调用静态方法
- C++ - 如何在不静态的情况下将回调绑定到类方法?
- C++中静态方法的局部变量范围
- 仅在少数方法(静态或共享库)中解析的外部符号
- LNK2019 在文件中调用静态成员的方法时出错.cpp
- 将方法静态性传播到派生类