我在 location.c 中遇到了 apache jsvc java 守护程序的以下代码。
char *location_jvm_cfg[] = {
"$JAVA_HOME/jre/lib/jvm.cfg", /* JDK */
"$JAVA_HOME/lib/jvm.cfg", /* JRE */
"$JAVA_HOME/jre/lib/" CPU "/jvm.cfg", /* JDK */
"$JAVA_HOME/lib/" CPU "/jvm.cfg", /* JRE */
NULL,
};
我通过源代码查找CPU宏在代码中扩展 "$JAVA_HOME/jre/lib/" CPU "/jvm.cfg"
但找不到这样的宏定义。
我不确定 CPU 是 C 宏还是其他正在配置 autoconf 工具的东西。
上面的 CPU 值如何替换为实际的 CPU 值?
我面临的问题是,当我在 Solaris 上构建 jsvcCFLAGS
并LDFLAGS
设置为 -m64 时,生成的 64 位 solaris 二进制文件会尝试从而$JAVA_HOME/jre/lib/sparc/jvm.cfg
不是加载 jvm .so 文件$JAVA_HOME/jre/lib/sparcv9/jvm.cfg
更新
使用以下命令行运行 JSVC 附带的 ./configure 是正确的
configure --with-java=/path/to/jdk1.7.0_45 --host=sparcv9-sun-solaris2.10 CFLAGS="-m64" LDFLAGS="-m64"
额外的--host=sparcv9-sun-solaris2.10
导致生成的 gcc 命令是
gcc -m64 -DOS_SOLARIS -DDSO_DLFCN -DCPU=\"sparcv9\" -Wall -Wstrict-prototypes
代替
gcc -m64 -DOS_SOLARIS -DDSO_DLFCN -DCPU=\"sparc\" -Wall -Wstrict-prototypes
这就是导致生成的 64 位 jsvc 二进制文件尝试链接 32 位 so 文件而不是 64 位 so 文件的原因。