关于在ndk r15

时间:2017-11-16 09:20:44

标签: c++ android-ndk

我遇到有关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平台上开发我的库。

2 个答案:

答案 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;

然后,它有效。

感谢所有帮助。