gpt4 book ai didi

c - 此 C 示例代码中的 CPU 符号是如何解析的?

转载 作者:太空狗 更新时间:2023-10-29 11:45:16 25 4
gpt4 key购买 nike

我在 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 上使用 CFLAGSLDFLAGS 设置为 -m64 构建 jsvc 时,生成的 64 位 solaris 二进制文件会尝试加载 jvm 。所以文件来自 $JAVA_HOME/jre/lib/sparc/jvm.cfg 而不是 $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 文件的原因。

最佳答案

它绝对必须是预处理器定义。在该代码中没有其他任何东西可以工作。

为了使配置使用不同的 CPU,配置脚本可能需要一个 configuration triplet。 .这可能看起来像 'i686-unknown-gnu-linux'

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

关于c - 此 C 示例代码中的 CPU 符号是如何解析的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19821333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com