"undefined symbol" 在 Apache 模块中运行 运行 JNI_CreateJavaVM 时出错

"undefined symbol" error while running JNI_CreateJavaVM function in Apache module

我想通过 ap_hook_pre_config 有趣的方式在 Apache 模块中初始化 JVM,但是当我 运行 XAMPP 时,出现了这个错误:

XAMPP: Starting Apache...fail.

httpd: Syntax error on line 158 of /opt/lampp/etc/httpd.conf: Cannot load modules/mod_hotcup.so into server: /opt/lampp/modules/mod_hotcup.so: undefined symbol: JNI_CreateJavaVM

奇怪,编译正常

有什么遗漏的想法吗?

我用的是Ubuntu18,Java11.这是源码mod_hotcup.c

您的问题来自调用 ld 时的参数顺序:

link 的库必须在 link 的代码之后。

而不是

ld -Bshareable -o mod_hotcup.so mod_hotcup.o

应该是

ld -Bshareable -o mod_hotcup.so mod_hotcup.o -L${LIBPATH} -ljvm