【发布时间】:2019-07-10 03:09:21
【问题描述】:
我是从源文件构建 gcc 的新手。我正在为 QNX 构建一个交叉编译器版本。
过程的一部分是使用有关 QNX 版本的信息和一些路径信息来修改 build_hooks。
我正在构建 libstdc++-v3 的过程中。交叉编译器构建良好,它被用于构建 libstdc++ 源代码。
它运行良好,直到它开始包含头文件,例如 math.h。具体来说,它正在构建 complex_io.c。它包括 cmath,它执行 #include_next "math.h"
此时出现一些函数重定义错误,例如:
In file included from /home/parallels/qnx-core-dev-tools/core-dev-tools/tools/gcc/branches/gcc_8_2_branch/linux-x86-o-ntox86/i486-pc-nto-qnx6.6.0/libstdc++-v3/include/complex:44,
from ../../../../../libstdc++-v3/src/c++98/complex_io.cc:25:
/home/parallels/qnx-core-dev-tools/core-dev-tools/tools/gcc/branches/gcc_8_2_branch/linux-x86-o-ntox86/i486-pc-nto-qnx6.6.0/libstdc++-v3/include/cmath:80:3: error: redefinition of 'double std::abs(double)'
abs(double __x)
^~~
In file included from /home/parallels/qnx-core-dev-tools/core-dev-tools/tools/gcc/branches/gcc_8_2_branch/linux-x86-o-ntox86/i486-pc-nto-qnx6.6.0/libstdc++-v3/include/cmath:36,
from /home/parallels/qnx-core-dev-tools/core-dev-tools/tools/gcc/branches/gcc_8_2_branch/linux-x86-o-ntox86/i486-pc-nto-qnx6.6.0/libstdc++-v3/include/complex:44,
from ../../../../../libstdc++-v3/src/c++98/complex_io.cc:25:
/opt/qnx660/target/qnx6/usr/include/math.h:720:15: note: 'double std::abs(double)' previously defined here
inline double abs(double _Left) // OVERLOADS
^~~
交叉编译器的构建导致 QNX (/opt/qnx660/target/qnx6/usr/include) 头文件的基本安装的包含搜索路径,因此当 cmath 执行 #include_next "math.h" 时,包含的 math.h 来自此目录路径。
我想了解的是 libstdc++-v3 的源代码树中正确的 math.h 在哪里?有几个可供选择,我至今未能选择正确的一个。
./fixincludes/tests/base/ansi/math.h
./fixincludes/tests/base/architecture/ppc/math.h
./fixincludes/tests/base/math.h
./libstdc++-v3/include/tr1/math.h
./libstdc++-v3/include/c_compatibility/math.h
./linux-x86-o-ntox86/i486-pc-nto-qnx6.6.0/libstdc++-v3/include/tr1/math.h
./linux-x86-o-ntox86/i486-pc-nto-qnx6.6.0/pic/libstdc++-v3/include/tr1/math.h
即使我知道哪个是正确的,我也不确定如何配置构建以便它选择正确的 math.h 而不必破解任何自动生成的 Makefile。
想法?
谢谢你, 凯文
【问题讨论】:
-
它通常是系统 libc 提供的头文件,而不是编译器。
-
@Shawn 我想知道这一点。我不知道 libstdc++-v3 的构建是否包含在 gcc 的代码包中(例如,所有文件都存在,包括头文件),或者是否存在对源包的一些依赖项,这些依赖项预计会在系统上进行构建。
-
gcc 有一个邮件列表,我认为有人会更有可能找到有经验的 gcc 开发人员,他们可能会提供一些有用的帮助。
-
啊,好主意,我会这样做,谢谢@SamVarshavchik
-
我刚刚编译了一个交叉编译器(avr-gcc),一开始我遇到了一些困难。问题是我已经有了旧版本的 avr-gcc 和环境变量。我将旧版本移动到不同的位置,并非常仔细地阅读了 gcc 文档gcc.gnu.org/install/configure.html,它编译正确。