【问题标题】:g++ default header include listg++ 默认头包含列表
【发布时间】:2012-06-19 21:11:54
【问题描述】:

在 Linux 机器 (lubuntu 11.10) 中以详细模式使用 cross g++ 执行编译时,我可以看到默认包含头目录的列表:

#include <...> search starts here:
/opt/eldk-4.2/usr/bin/../lib/gcc/powerpc-linux/4.2.2/include
/opt/eldk-4.2/ppc_4xx/usr/include/c++/4.2.2/opt/eldk-4.2/ppc_4xx/usr/include/c++/4.2.2/powerpc-linux
/opt/eldk-4.2/ppc_4xx/usr/include/c++/4.2.2/backward
/opt/eldk-4.2/usr/../ppc_4xx/usr/include

在另一台 Linux 机器(lubuntu 12.10)中执行相同的 g++ 二进制文件,我得到另一个不同的列表,其中的元素更少:

#include <...> search starts here:
/opt/eldk-4.2/usr/bin/../lib/gcc/powerpc-linux/4.2.2/include

其中一些元素似乎构造不佳,如下所示:

ignoring nonexistent directory "/opt/ppc_4xx/usr/lib/gcc/powerpc-linux/includ../include/c++/4.2.2"

结果是在第一个系统上编译的某些代码在第二个系统上没有编译,因为找不到某些头文件。

为什么会这样?这个列表来自哪里?谁负责建造它?是否可以轻松更改?

感谢任何帮助。

【问题讨论】:

  • g++ -v -H 运行它,它会告诉你很多...

标签: linux gcc include g++ embedded-linux


【解决方案1】:

您可以通过设置环境变量将目录添加到默认搜索路径:

  • C_INCLUDE_PATH(用于 C 头文件)
  • CPLUS_INCLUDE_PATH(用于 C++ 头文件)。

或者,you can create and edit specfile 并将其放置在 G++ 查找它们的位置。你可以用strace gcc查看路径。

Additional documentation on specfiles on GCC page.

【讨论】:

  • 不幸的是,我不知道存储默认目录的任何地方。它们可能已内置到编译器中。
  • 我怀疑它是否存储在编译器中,因为在不同的机器上执行相同的二进制文件会产生不同的结果
  • 它内置在编译器中,但路径是内置的相对路径,因此它们相对于二进制文件的安装位置。
【解决方案2】:

我在使用 ELDK 4.2 时遇到了一些问题。这很可能与 ubuntu 12.04 中的某些更改有关,因为我在升级之前让编译器在同一台计算机上运行良好。

我的问题是似乎忘记了 /usr

忽略不存在的目录“/opt/eldk-4.2/../ppc_82xx/usr/include”

应该是

/opt/eldk-4.2/usr/../ppc_82xx/usr/include

在 ubuntu 11.10 上完美运行。

我已尝试从 ISO 安装 ELDK 并从 ubuntu 11.10 中的工作版本复制安装

【讨论】:

  • 我通过将缺少的路径添加到规范文件来“解决”了我的问题。这是一个黑客,但是。 mingw.org/node/25。应该注意的是,ELDK 4.2 适用于我从 11.04 升级的 ubuntu 映像,但不适用于新安装的 12.04。路径和链接的解析方式存在某种不兼容。我的猜测是,如果一个目录不以 / 结尾,它会在某个库的某处给出不同的结果
  • 我不确定这是一个 hack - 这里需要一个解决方案,将构建环境与其主机隔离 - 否则构建将根本无法重复。可以使用项目进行版本控制的工具的环境配置是必须的。事实上,对你的工具进行版本控制也是一个不错的计划。
  • 问题是它应该已经可以工作了。我认为潜在的问题是 ELDK 是用动态库构建的。因此,当主机更新时,您可能会遇到问题。我很确定这是因为 ubuntu 12.04 已将 libc 更新到 2.15。即使您将上述更改应用于规范(您不应该这样做,因为通常从 gcc 二进制文件中找到相对路径),当它尝试查找 .so 软库时,您将在 12.04 下遇到其他问题链接。所以现在我建议使用早期的 ubuntu
猜你喜欢
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多