我正在使用GLEW库glew32.dll(从GLEW网站下载标准版),我正在尝试加载变量GLEW_OK。这个变量在glew.h文件中定义(作为0的uint),所以我假设它将包含在glew32.dll文件中。但是,当我使用Java JNA代码时:
NativeLibrary glew = NativeLibrary.getInstance("glew.dll");
Pointer p = glew.getGlobalVariableAddress("GLEW_OK");
System.out.println(p.getInt(0));
我在线程" main"中遇到异常错误java.lang.UnsatisfiedLinkError:查找错误' GLEW_OK':找不到指定的过程。
at com.sun.jna.NativeLibrary.getGlobalVariableAddress(NativeLibrary.java:587)
at mcclean.opengl.glew.GLEWUtils.init(GLEWUtils.java:22)
库加载正常,但似乎无法找到静态变量。为什么没有加载静态变量?
答案 0 :(得分:1)
查看标题文件glew.h
,GLEW_OK
如下:
/* error codes */
#define GLEW_OK 0
这是预处理器定义。这不是你在Java世界中设想的“静态最终变量”。编译C ++项目时,预处理器#define
基本上由预处理器“复制”到代码中。这意味着if (val == GLEW_OK)
字面上已更改为if (val == 0)
。
由于预处理器只是替换了文本,因此没有关于源自.dll
文件中的定义的值的名称或来源的信息。
您需要手动查找值。您可以通过从GLEW下载二进制文件并导航到include/GL/glew.h
文件来执行此操作。在此之后,您可以在Java中为常量创建一个类:
class GlewConstants {
public static final int GLEW_OK = 0;
// ...
}