【发布时间】:2013-11-06 19:45:08
【问题描述】:
我在 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 上构建 jsvc 并将 CFLAGS 和 LDFLAGS 设置为 -m64 时,生成的 64 位 solaris 二进制文件会尝试从 $JAVA_HOME/jre/lib/sparc/jvm.cfg 而不是 @987654326 加载 jvm .so 文件@
更新
使用以下命令行运行 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 文件的原因。
【问题讨论】:
-
不是
gcc预定义宏,请检查您的标头或 Makefile。 -
@ouah 在过去的 13 年里我没有做过任何 C 编程,也从来没有在 Unix 上不确定要查看哪些头文件。有什么方法可以强制 ./configure 将 CPU 设置为某些特定的价值。
-
@ams 如果您使用的是 linux,那么您可以尝试使用 ctags 生成标签并运行 gvim -t CPU 并显示它是什么。如有必要,我可以用一些说明来回答。
-
@ams 但我不确定 100% 是否有帮助,如果 grep 什么也没提供。
标签: c linux gcc solaris autoconf