【发布时间】: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