【问题标题】:How is the CPU symbol resolved in this C sample code?这个 C 示例代码中的 CPU 符号是如何解析的?
【发布时间】: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 并将 CFLAGSLDFLAGS 设置为 -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


【解决方案1】:

它绝对必须是预处理器定义。该代码中没有其他内容。

为了使 configure 使用不同的 CPU,configure 脚本有可能采用configuration triplet。这可能看起来像“i686-unknown-gnu-linux”

显然configure.guess 负责解决这个问题。如果您在配置命令行上指定其中一个三元组(四元组?),它可能会认为它是在交叉编译器中构建的,但它应该可以工作。

【讨论】:

  • 是的,我也责怪 autotools。
  • @Zan Lynx 我很幸运,坐在我旁边的一个朋友做定制的 Linux 嵌入式构建,并且是一位汽车工具专家,他在我的问题的更新中找到了选项。您的解释与他的解释非常接近,而不是我完全理解解释。你能添加命令行选项来设置三元组吗?我可以接受你的回答。
【解决方案2】:

生成的configure脚本将-DCPU添加到CFLAGS,根据configure--host的值,默认为configure--build,默认为猜测值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2014-12-29
    • 1970-01-01
    相关资源
    最近更新 更多