解决方案在
如何使用 gcc/cmake 在 64 位 linux 机器上编译 32 位二进制文件
不可能,因为我使用 3rd 方软件和其他已经使用 CFLAGS 变量的东西。并且不允许修补他们的 makefile - 我的老板说。
所以我必须找到另一种方法来执行它。也许有一些符号链接的魔法将对 gcc 的调用重定向到 32 位版本的编译器(希望不会动态检测到默认目标)。
解决方案在
如何使用 gcc/cmake 在 64 位 linux 机器上编译 32 位二进制文件
不可能,因为我使用 3rd 方软件和其他已经使用 CFLAGS 变量的东西。并且不允许修补他们的 makefile - 我的老板说。
所以我必须找到另一种方法来执行它。也许有一些符号链接的魔法将对 gcc 的调用重定向到 32 位版本的编译器(希望不会动态检测到默认目标)。
您不允许在您的环境中更改 CFLAGS,但是您是否有任何理由不能临时覆盖它以进行构建?
对于基于自动工具的包,我会首先尝试:
CFLAGS="-m32" ./configure [opts]
make
make install
一个编写良好的configure.ac
文件应该尊重您的 CFLAGS 变量并附加到它,而不需要您修改包源。
更新
那么,假设你不能重新定义你的 CC 变量,我会玩一些路径技巧。使用以下内容(未经测试)制作${HOME}/gcc32
一个shell 脚本:gcc
#!/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 调用编译器(假设它们使用相对路径)时,将调用您的脚本。