4

環境:

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 を試しましたが、最後の 2 つのインクルード フォルダーのみが変更されました。

/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 について知っていますが、これらはコマンドラインまたはメイクファイルで指定されていません。)

-nostdinc を使用し、各フォルダーを直接 (-I を使用して) 指定することで、ほぼ正しい結果を得ることができます。私は Qt を使用しているため、-I を使用してすべてのシステム フォルダーを個別にリストするのではなく、GCC の構成済み検索パスを変更したいと考えています。

アドバイスをいただければ幸いです。

ありがとう、ブラッド

4

1 に答える 1

2

考えられる解決策の1つとして、あなたのケースには多すぎるかもしれません:

実際、あなたが達成しようとしていることは、異なるシステム イメージに対するクロス コンパイルに近いことを理解しています。このタスクは組み込み開発では非常に一般的ですが、それほど簡単ではありません。ほとんどのアイデアは、システムイメージが通常とは異なる場所にあると「考える」ようにGCCを構築することです。

このリンクは、少なくとも基本原則を理解するのに役立ちます。 これは別のものであり、さらに、クロスコンパイル FAQ などの他の便利なリンクが含まれています。

于 2013-04-16T23:40:56.183 に答える