如何编译在64位的linux系统的32位二进制不接触CFLAGS环境变量
在如何编译在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