【问题标题】:Default include path Glibc默认包含路径 Glibc
【发布时间】:2013-11-08 21:16:13
【问题描述】:

我正在为一个项目开发一组库,我们想让它们易于包含。因此,我们将库放在 /usr/lib/skywalker 中,将头文件放在 /usr/include/skywalker 中。例如,在每个程序中,我们将库包含为 #include 。

当我们想用 arm-linux-gnueabi-gcc 进行交叉编译(最终平台是 arm)时,问题就来了。它似乎没有将 /usr/include 作为默认包含路径,并且无法编译。我一直在网上搜索,尝试了编译器的几个参数,我只能找到libraries目录。

如何知道某个编译器中标头的默认路径?我们怎样才能以简单的方式解决这个问题(这个库将被另一组开发人员使用)?

【问题讨论】:

  • 我不是 C 程序员,但我猜这是因为当你为不同的平台交叉编译时,你需要不同的头文件,所以它不能使用/usr/include。解决这个问题的标准老式方法是使用 autoconf、automake 和 make;一种较新的解决方法是使用 CMake,它更易于使用。我不知道他们是否支持交叉编译,但如果他们不支持,我会感到惊讶。
  • 试试arm-linux-gnueabi-gcc -v -c somefile.c,寻找#include <...> search starts here:。
  • @n.m.:我一直在寻找这个。我尝试了编译器中的每个信息命令,但没有任何效果。那么容易!我现在可以解决所有问题。非常感谢。
  • /usr/include 对于交叉编译器来说是一条糟糕的路径,您可能会无意中包含主机头文件,并且调试起来并不有趣。
  • 我建议您在您的Makefile 中使用-L 和-I,并告诉您图书馆的用户相应地设置这些。据我所知,基于 GCC 的交叉编译器安装在某个路径中时,默认情况下会查看相对于其 bin/ 的路径,并且您不应该将库安装在例如/opt/crosscompiler/bin/../shared/lib 路径。

标签: c linux gcc include-path


【解决方案1】:

只需使用这个别名:

alias mygcc='gcc -I /whatever/'

另外,你可以使用环境变量C_INCLUDE_PATH和CPLUS_INCLUDE_PATH;更多内容:

【讨论】:

  • 我一直在寻找更优雅的解决方案。来自@n.m 的评论。帮助我找到了解决方案。
猜你喜欢
  • 2010-12-06
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-02
相关资源
最近更新 更多