如何覆盖GCC的配置以进行包含搜索?

时间:2013-04-16 23:15:30

标签: c++ c gcc configuration embedded-linux

环境:

Ubuntu,GCC 4.6.3 使用Qt 4.8

默认情况下,我的包含搜索顺序(由gcc -v报告)是:

<clipped out my project specific includes>
/usr/include/c++/4.6
/usr/include/c++/4.6/x86_64-linux-gnu/.
/usr/include/c++/4.6/backward
/usr/lib/gcc/x86_64-linux-gnu/4.6/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include

我正在尝试归档此构建环境,以便它不是从实际的系统文件夹构建,而是仅从已签入的源树构建,并且如果重新创建了我的机器,则定义良好。我遇到了覆盖gcc的系统搜索路径的问题。

具体来说,我首先尝试了--sysroot = .. / .. / sysroot,但只有最后两个包含文件夹已更改:

/usr/include/c++/4.6
/usr/include/c++/4.6/x86_64-linux-gnu/.
/usr/include/c++/4.6/backward
/usr/lib/gcc/x86_64-linux-gnu/4.6/include
/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed
../../sysroot/usr/include/x86_64-linux-gnu
../../sysroot/usr/include

GCC -v报道:

Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v 
--with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' 
--with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs 
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr 
--program-suffix=-4.6 
--enable-shared --enable-linker-build-id --with-system-zlib 
--libexecdir=/usr/lib 
--without-included-gettext --enable-threads=posix 
--with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib 
--enable-nls 
--with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug 
--enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin 
--enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic 
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu 
--target=x86_64-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 

所以似乎/ usr / lib / ...和/ usr / include ...行可能来自内置的GCC配置。我是GCC / G ++菜鸟,所以我在这里错了 - 请在适当的时候更正。

无论如何,我的问题是我如何更改配置以便这些文件夹:

/usr/include/c++/4.6
/usr/include/c++/4.6/x86_64-linux-gnu/.
/usr/include/c++/4.6/backward
/usr/lib/gcc/x86_64-linux-gnu/4.6/include
/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed

也相对于../../ sysroot?

(要清楚,我知道-I并且这些没有在命令行或make文件中指定。)

我可以通过使用-nostdinc并直接指定每个文件夹(使用-I)来获得几乎正确的结果,除了Qt元对象编译器在它被馈送时失败这些系统中的一些包括文件夹。因为我正在使用Qt,所以我想更改GCC配置的搜索路径,而不是仅使用-I单独列出每个系统文件夹。

非常感谢任何建议。

谢谢, 布拉德

1 个答案:

答案 0 :(得分:2)

正如可能的解决方案之一,可能对您的情况而言太多了:

实际上,据我所知,您要实现的目标是接近针对不同系统映像的交叉编译。这项任务在嵌入式开发中很常见,但并不容易。大多数想法是建立GCC所以它认为&#39;系统图像与普通图像不同。

This link至少应该帮助您理解基本原则。 This is another以及它还包含其他有用的链接,例如交叉编译常见问题解答。