2015-06-19 77 views
1

我試圖建立的binutils在Mac OS X上編譯Binutils的交叉編譯在OS X上的優勝美地

生成的MIPS代碼,我發現這個網站(http://www.theairportwiki.com/index.php/Building_a_cross_compile_of_GCC_for_MIPS_on_OS_X)從How to build GCC 4.8.x on Mac OS X host for MIPS target,並遵循指示。

我從brew安裝了gcc-4.8,並安裝了binutils和gcc的源代碼。這是編譯選項設置。

$ export CC=/usr/local/bin/gcc-4.8 
$ export CXX=/usr/local/bin/g++-4.8 
$ export CPP=/usr/local/bin/cpp-4.8 
$ export LD=/usr/local/bin/gcc-4.8 
$ export PREFIX=/opt/cross/gcc-mips 
$ export CFLAGS=-Wno-error=deprecated-declarations 

然後我配置,並使bintuils。

問題是,構建靜態庫後,我有一個錯誤消息,該檔案不是爲x86_64構建的,然後我有一堆未定義的符號錯誤。使用谷歌搜索來發現我需要從https://github.com/tpoechtrager/osxcross/issues/11設置AR(存檔)變量。我添加了export AR=/usr/local/bin/gcc-ar-4.8,但我有另一個錯誤消息,因爲gcc-ar-4.8不起作用。

/usr/local/bin/gcc-ar-4.8 
/usr/local/bin/gcc-ar-4.8: Cannot find plugin 'liblto_plugin.so' 

再次谷歌搜索發現,GCC-AR不與Mac OS X(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56893)工作。

gcc-ar is for use with newer GNU binutils only as that is the only ar which supports plugins. 
Apple's ar does not support plugins (though it could be made to; it will be a different plugin interface than the GNU BFD 
plugin interface which GCC supports right now). 

我剛剛創建了一個啞liblto_plugin.so「文件/usr/local/Cellar/gcc48/4.8.4/libexec/gcc/x86_64-apple-darwin14.3.0/4.8.4目錄取消錯誤消息,但在這種情況下,它看起來像/usr/ar被調用,當我使用/usr/bin/gcc-ar-4.8得到相同的架構和未定義的符號錯誤。

如何解決這些問題?如何在Mac OS X上構建交叉編譯器工具(gcc和binutils)?

+1

[這些](https://www.macports.org/ports.php?by=category&substr=cross)會有嗎?讓Macport爲你建立和維護東西要容易得多... – Droppy

+0

@Droppy:如果可能的話,我儘量不要使用Macports,因爲我在使用brew時遇到過一些問題。 http://superuser.com/questions/181337/is-it-safe-to-install-both-homebrew-and-macports-on-the-same-machine – prosseek

+0

儘量不要通過env設置'CFLAGS',它通常問題的原因(即一些內部'CFLAGS'的東西不會被設置)。你也可以擺脫'CPP'和'LD',這是沒有必要的。你還應該考慮用'./configure --prefix'替換'PREFIX'。 – Thomas

回答

1

Mac OS X的靜態庫生成器不是ar,而是libtool -static。還有一個關於此的SO帖子 - Static library link issue with Mac OS X: symbol(s) not found for architecture x86_64

binutils有多個靜態鏈接的庫。因此,我用libtool -static -o替換了所有ar rc命令以獲取不會導致錯誤的靜態庫。

這樣做,我也必須做兩個修改。

  1. 一些庫產生libtool腳本衝突的Mac OS X的libtool,我不得不重新命名的腳本。
  2. 有些目標文件不包含符號,我不得不刪除這些對象。

然後我可以得到沒有任何問題的二進制文件。