使用本机代码的 web 应用程序在 Glassfish 2.x 中运行良好。
在 3.1.1 中,它失败了:
[#|2012-04-18T14:43:08.330+0000|SEVERE|glassfish3.1.2|com.sun.jersey.spi.container.ContainerResponse|_ThreadID=21;_ThreadName=Thread-2;|The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container
java.lang.UnsatisfiedLinkError: com.basistech.rnt.jni.initializeEnvironmentSpecificRootDirectory(Ljava/lang/String;)Z
at com.basistech.rnt.jni.initializeEnvironmentSpecificRootDirectory(Native Method)
请注意,这是抱怨特定符号而不是整个库的链接错误的版本。
相同的 JNI 库可以在同一台机器上的 Glassfish之外的示例 Java 程序中正常运行。
阅读 JDK 源代码,这似乎只有在dlsym
(我们在 Linux 上)未能返回符号时才有可能。(这都是Java 1.6.x。)我很难理解Glassfish 可能正在做什么,这会导致dlsym
无法在共享库中看到这个符号。
有什么想法吗?