我编写了一个很小的 Vala 类,将其编译为 C 代码,生成 JNI header 和实现以从中调用 Vala/CCode。
所以最后我有两个头文件和两个实现文件,我用 gcc 将它们编译成 JNI 库。它可以很好地编译并生成一个库。
当我运行 Java 应用程序(包括此库)时,我在库中遇到符号查找错误
。
有趣的部分是:undefined symbol: g_once_init_enter
- 它不在我的代码中,而是在 glib 代码中,由 valac
生成。
所以,JNI C 代码调用 Vala C 代码,而 Vala C 代码调用 glib 东西。 Java 似乎找不到 glib 部分。
任何人有任何想法,在这里做什么?
最佳答案
这似乎是 Das Jott 生成编译器命令行以生成 C 文件的代码的问题,并且已修复 in this commit .看起来他们正在尝试使用 exec()
执行 bash 样式的 shell 脚本,这导致 glib-2.0
的 pkg-config
标志> 永远不要进入链接器命令行。
tl;dr:正如 Samhain 所说,根本问题是无法链接到 glib-2.0
。
关于Java JNI 和 Vala - undefined symbol : g_once_init_enter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22175183/