[英]How to compile a 32-bit binary on a 64-bit linux machine with gcc/cmake
[英]How to compile a 32-bit binary on a 64-bit linux machines without touching the CFLAGS environment variable
解決方案
如何使用gcc / cmake在64位Linux機器上編譯32位二進制文件
是不可能的,因為我使用第三方軟件和已經使用CFLAGS變量的其他東西。 我的老板說,不允許修補他們的makefile。
所以我必須找到另一種方法來強制執行它。 也許有一些神奇的符號鏈接將調用gcc重定向到32位版本的編譯器(希望不動態檢測默認目標)。
您不能在您的環境中更改CFLAGS,但有任何理由您無法暫時覆蓋它以進行構建嗎?
對於基於autotool的軟件包,我首先嘗試:
CFLAGS="-m32" ./configure [opts]
make
make install
一個編寫良好的configure.ac
文件應該尊重你的CFLAGS變量並附加到它,而不需要你修改包源。
更新
那么,假設你不能重新定義你的CC變量,我會玩一些路徑技巧。 使用以下(未經測試)在${HOME}/gcc32
名為gcc
的shell腳本:
#!/bin/sh
/usr/bin/gcc -m32 "$@"
當您想要構建32位時,請將其添加到您的路徑中:
export PATH=${HOME}/gcc32:${PATH}
明顯的修改將支持g++
, icc
或任何其他編譯器。
我們假設gcc和朋友位於“/ usr / bin”中。 我們還假設您的路徑中有一個名為“〜/ .local / bin”的文件夾。 您可以在“〜/ .local / bin”中創建名為“gcc”的bash腳本,如:
#! /bin/bash /usr/bin/gcc -m32 $@
您可以使用以下內容類似地創建“g ++”腳本:
#! /bin/bash /usr/bin/g++ -m32 $@
基本上,根據需要繼續為“c ++”,“cc”,“as”,“ld”等執行此操作。 使腳本可執行。 確保“〜/ .local / bin”在“/ usr / bin”之前的PATH環境變量中。 如果是這種情況,那么當makefile調用編譯器時(假設它們使用相對路徑),將調用您的腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.