【问题标题】:Java JNI and Vala - Undefined Symbol: g_once_init_enterJava JNI 和 Vala - 未定义符号:g_once_init_enter
【发布时间】: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


【解决方案1】:

这似乎是 Das Jott 生成编译器命令行以生成 C 文件的代码的问题,已修复 in this commit。看起来他们试图使用 exec() 执行 bash 样式的 shell 脚本,这导致 glib-2.0pkg-config 标志永远不会进入链接器命令行。

tl;dr:正如 Samhain 所说,根本问题是无法链接到 glib-2.0

【讨论】:

  • 谢谢!我不再关注那个话题了:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多