これが正しくなるまでには少し時間がかかりました。この問題は、UbuntuでARMターゲット用にクロスコンパイルするときに発生しました。私はそれを解決しました:
PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib ./autogen.sh --build=`config.guess` --host=armv5tejl-unknown-linux-gnueabihf
CFLAGSがautogen.sh/configureで使用されていないことに注意してください。これを使用すると、「configure:error:Cコンパイラは実行可能ファイルを作成できません」というエラーが発生しました。ビルド環境では、autogen.shスクリプトを使用していましたが、autogen.shスクリプトがない場合は、上記のコマンドで./autogen.shを./configureに置き換えてください。ターゲットシステムでconfig.guessを実行して、-hostパラメーターを取得しました。
autogen.sh/configureを正常に実行した後、次のコマンドでコンパイルします。
PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib CFLAGS="-march=... -mcpu=... etc." make
私が使用することを選択したCFLAGSは、「-march = armv5te -fno-tree-vectorize -mthumb-interwork-mcpu = arm926ej-s」でした。すべてのインクルードディレクトリが正しく設定されるまでにはしばらく時間がかかります。クロスコンパイラを指すインクルードとルートファイルシステムのインクルードを指すインクルードが必要な場合があり、競合が発生する可能性があります。
これは完璧な答えではないと確信しています。また、Makefileで/ ccrootfsではなく/を指すディレクトリが含まれていることもあります。これを修正する方法を知りたいです。これが誰かを助けることを願っています。
export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH
、コンパイラは最初に~/local/include
、および$ C_INCLUDE_PATHを検索しますが、最初のディレクトリにインクルードが見つからなかった場合に限ります。