簡體   English   中英

如何在64位Linux機器上編譯32位二進制文​​件而不觸及CFLAGS環境變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM