我遇到有关UnsatisfiedLinkError的问题。
我的代码是:
class ClassA
{
public:
static const int MY_ENUM_1 = 0;
};
我使用Android Studio将代码构建为.a。
然后我写.so通过JNI链接我的lib接口。
我成功构建了项目。但是在运行时它会发生错误,
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZN12LaChenEngine14GraphicsSystem22VertexBufferAccessList12DYNAMIC_DRAWE
LaChenEngine是命名空间。
GraphicsSystem是LaChenEngine中的命名空间。
VertexBufferAccessList是我的用于声明所有枚举的类。
DYNAMIC_DRAW是VertexBufferAccessList类中的枚举之一。
这是关于ndk版本的问题吗?
顺便说一句,我在Windows平台上开发我的库。
答案 0 :(得分:1)
一个可能的原因是一个项目定义了一个extern "C"
函数,另一个假定它是一个C ++函数。
更多信息:https://stackoverflow.com/a/1041880/755804
另一个猜测:检查你的.so中是否存在该功能,如果没有,请找出它的位置。
一般来说,我如何处理这样的链接问题是:我将从一个hello-jni应用程序开始,一次添加一个功能(另一个库,C ++函数,名称空间中的C ++函数等)
答案 1 :(得分:0)
我测试了很多版本的ndk,它仍然会再次发生并且开始了。
所以我决定改变这样的代码:
//.h
class ClassA
{
public:
static const int MY_ENUM_1;
};
//.cpp
const int ClassA::MY_ENUM_1 = 0;
然后,它有效。
感谢所有帮助。