2011-08-09 162 views
3

我有一個非常簡單的C程序,它只使用標準庫函數進行一些加密計算。在OS X上編譯C程序以在Ubuntu上運行

我將在Ubuntu(10.04,32位)上運行該程序並使用帶-m32標誌的cc在OS X 10.6上對其進行編譯。當我嘗試在Ubuntu上運行它時,我收到錯誤消息「無法執行二進制文件」。

當我在Ubuntu上編譯它運行良好。

是否有任何簡單的方法將OS X上的代碼編譯爲可在Ubuntu上運行的二進制文件?如果不是,導致二進制不兼容的區別是什麼?

+0

部分重複:http://stackoverflow.com/questions/5245444/cross-compiler-for-linux-on-mac-os-x這也鏈接到['crosstool-NG'](http:// crosstool -ng.org)。 – darvids0n

回答

1

恐怕你不能給出gcc的最小可移植性。

當然你可以構建一個交叉編譯器like this但我建議你使用和編譯一個Ubuntu虛擬機。

+0

你可以!我之前完成了這個,成功了。GCC非常便攜。它是不可移植的支持結構(庫和內核接口)。建立你的交叉編譯器並不是特別容易,並且在這個領域有很多地雷不知情。鑑於現在無處不在的虛擬機,使用虛擬機更簡單,更安全。 –

3

您需要設置一個交叉編譯器。使用GNU工具鏈,過程看起來是這樣的:

  1. 下載binutilsgccglibc
  2. Untar bintuls(類似於binutils-x.y.z)。
  3. 的mkdir binutils的Linux的
  4. CD binutils的Linux的
  5. ../binutils-xyz/configure --target = i386的Ubuntu的Linux的(不知道確切的目標)
  6. 使
  7. 須藤make install
  8. cd ..
  9. untar gcc(類似於gcc-xyz)。
  10. 的mkdir GCC-linux的
  11. CD GCC-linux的
  12. ../gcc-xyz/configure --target = i386的Ubuntu的Linux的(不知道確切的目標)
  13. 使
  14. 須藤使安裝
  15. CD ..
  16. 解壓的glibc(爲類似的glibc-XYZ)
  17. 的mkdir的glibc-linux的
  18. CD的glibc-LINX
  19. ../glibc-xyz/configure --target = I386-Ubuntu的Linux操作系統(不是確切的目標肯定)
  20. 使
  21. 須藤使安裝
  22. CD ..

我我從未嘗試將OSX作爲主機操作系統,所以我不知道是否還有其他複雜情況,但這是一般方法。我在記憶中工作,所以如果您需要更多幫助,請添加評論。

+0

感謝您的信息。我想我將在VirtualBox中安裝Ubuntu的副本以用於編譯。這似乎是最簡單的路線。 –

+0

您需要將Linux內核標題貼近您所定位的發行版。除非獲得這些內容,否則GLIBC無法連接到內核。 –

+0

請注意,編譯gcc需要超過幾分鐘的時間......並且可能需要一些調查才能爲binutils和glibc獲取正確的配置選項。 – RBerteig