【发布时间】:2014-03-04 14:49:30
【问题描述】:
我编写了一个小型 Vala 类,将其编译为 C 代码,生成 JNI 标头和实现以从中调用 Vala / CCode。
所以最后我有两个头文件和两个实现文件,我用 gcc 编译到一个 JNI 库。它可以很好地编译并生成一个库。
当我运行 Java 应用程序(包括这个库)时,我在库中得到 symbol lookup error。
有趣的部分是:undefined symbol: g_once_init_enter - 它不在我的代码中,而是在由valac 生成的 glib 代码中。
所以,JNI C 代码调用 Vala C 代码,后者调用 glib 的东西。 Java 似乎找不到 glib 部分。
任何人知道,在这里做什么?
【问题讨论】:
-
您是否将 glib 库静态链接到您的共享库中?如果没有,您还需要加载 glib 库
-
@Samhain:是的,我也是这么想的......所以我做了:` static { System.loadLibrary("glib-2.0"); } 静态 { System.loadLibrary("test"); } ` 仍然得到:` /usr/lib/jvm/java-7-openjdk-amd64/bin/java:符号查找错误:/usr/lib/x86_64-linux-gnu/libtest.so:未定义符号:g_once_init_enter `两个库都在那个指定的目录中,所以它不应该是未定义的......
-
动态链接。
-
现在可以使用了。 github.com/DasJott/mkjni
-
@DasJott 您应该在您的解决方案中添加一个答案,以帮助该问题的未来访问者。
标签: java c java-native-interface glib vala