這花了一段時間纔得到正確的。在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使用,用它給我的錯誤:「配置:錯誤:C編譯器不能創建可執行文件」。在構建環境中,我提供了一個autogen.sh腳本,如果您沒有autogen.sh腳本,請使用上面的命令中的./configure替換./autogen.sh。我在目標系統上運行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-樹矢量化-mthumb-交織-mcpu = ARM926EJ -s」。要使所有include目錄正確設置需要一段時間:您可能希望某些包含指向您的交叉編譯器,並且有些包含指向您的根文件系統,並且可能會有一些衝突。
我相信這不是一個完美的答案。而且我仍然看到一些include目錄指向Makefiles中的/和not/ccrootfs。想知道如何改正這一點。希望這可以幫助某人。
請注意,除PATH外,您會覆蓋系統默認值。如果你做了'export C_INCLUDE_PATH =〜/ local/include:$ C_INCLUDE_PATH',你的編譯器將首先在'〜/ local/include'中搜索,而在$ C_INCLUDE_PATH中只有在第一個目錄中沒有找到include時。 –