在如何編譯在64位的linux系統的32位二進制不接觸CFLAGS環境變量
How to compile a 32-bit binary on a 64-bit linux machine with gcc/cmake
的解決方案是不可能的,因爲我使用的第三方軟件和其他的東西,這是已經使用CFLAGS變量。我們的老闆說,不允許修補他們的makefile。
所以我必須找到另一種方式來執行它。也許一些帶符號鏈接的魔法會將調用gcc重定向到32位版本的編譯器(希望默認目標不是動態檢測的)。
在如何編譯在64位的linux系統的32位二進制不接觸CFLAGS環境變量
How to compile a 32-bit binary on a 64-bit linux machine with gcc/cmake
的解決方案是不可能的,因爲我使用的第三方軟件和其他的東西,這是已經使用CFLAGS變量。我們的老闆說,不允許修補他們的makefile。
所以我必須找到另一種方式來執行它。也許一些帶符號鏈接的魔法會將調用gcc重定向到32位版本的編譯器(希望默認目標不是動態檢測的)。
您不允許在您的環境中更改CFLAGS,但是您是否有任何理由暫時無法爲構建構建它?
對於基於autotool包,我先試試:
CFLAGS="-m32" ./configure [opts]
make
make install
一個寫得很好的configure.ac
文件應該尊重你的CFLAGS變量,並追加到它,而無需修改軟件包源。
更新
假設,那麼,你不能重新定義你的CC變量,要麼,我會玩一些花樣路徑。使${HOME}/gcc32
一個shell腳本調用gcc
以下的(未經測試):
#!/bin/sh
/usr/bin/gcc -m32 "[email protected]"
然後在前面加上給你的路,當你想建立32位:
export PATH=${HOME}/gcc32:${PATH}
,明顯的修改將支持g++
, icc
或任何其他編譯器。
我們假設gcc和朋友位於「/ usr/bin」中。讓我們假設你有一個名爲「〜/ .local/bin」的文件夾,它位於你的路徑中。
#! /bin/bash /usr/bin/gcc -m32 [email protected]
您同樣可以創建一個「G ++」腳本內容如下:
#! /bin/bash /usr/bin/g++ -m32 [email protected]
您可以在「〜/。當地/箱」如創建一個名爲「海灣合作委員會」 bash腳本基本上,根據需要繼續執行「C++」,「cc」,「as」,「ld」等。使腳本可執行。確保「〜/ .local/bin」在你的PATH環境變量BEFORE「/ usr/bin」中。如果是這種情況,那麼當makefile調用編譯器時(假設它們使用相對路徑),您的腳本將被調用。
使用「$ @」(帶引號)確保args中的空格處理正確。 – coppit 2015-08-23 23:57:28
這是「第三方軟件和其他東西」的依賴項,需要編譯以及建立32位二進制文件時? – 2009-11-04 12:29:31