131

是否可以在32 位64 位系统上cmake编译项目?可能是,但我该怎么做呢?gcc

当我以“无知”的方式尝试它时,没有设置任何参数/标志/等,只是设置LD_LIBRARY_PATH在其中查找链接库~/tools/lib似乎忽略了它,只查看名为lib64的子目录。

4

6 回答 6

127
export CFLAGS=-m32
于 2009-08-13T14:44:21.120 回答
78
$ gcc test.c -o testc
$ 文件测试
testc:ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),动态链接(使用共享库),用于 GNU/Linux 2.6.9,未剥离
$ ldd testc
    linux-vdso.so.1 => (0x00007fff227ff000)
    libc.so.6 => /lib64/libc.so.6 (0x000000391f000000)
    /lib64/ld-linux-x86-64.so.2 (0x000000391ec00000)
$ gcc -m32 test.c -o testc
$ 文件测试
testc:ELF 32 位 LSB 可执行文件,Intel 80386,版本 1 (SYSV),动态链接(使用共享库),用于 GNU/Linux 2.6.9,未剥离
$ ldd testc
    linux-gate.so.1 => (0x009aa000)
    libc.so.6 => /lib/libc.so.6 (0x00780000)
    /lib/ld-linux.so.2 (0x0075b000)

简而言之:使用-m32标志编译 32 位二进制文​​件。

另外,请确保您安装了所有必需库的 32 位版本(在我的情况下,我在 Fedora 上需要的只是 glibc-devel.i386)

于 2009-08-13T14:45:02.523 回答
16

在更高版本的 CMake 中,对每个目标执行此操作的一种方法是:

set_target_properties(MyTarget PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")

我不知道如何在全球范围内做到这一点。

于 2010-07-29T22:03:37.150 回答
8

对于任何复杂的应用程序,我建议使用lxc 容器。lxc 容器是“介于类固醇的 chroot 和成熟的虚拟机之间的东西”。

例如,这是一种在 Ubuntu Trusty 系统上使用 lxc 构建 32 位 wine 的方法:

sudo apt-get install lxc lxc-templates
sudo lxc-create -t ubuntu -n my32bitbox -- --bindhome $LOGNAME -a i386 --release trusty
sudo lxc-start -n my32bitbox
# login as yourself
sudo sh -c "sed s/deb/deb-src/ /etc/apt/sources.list >> /etc/apt/sources.list"
sudo apt-get install devscripts
sudo apt-get build-dep wine1.7
apt-get source wine1.7
cd wine1.7-*
debuild -eDEB_BUILD_OPTIONS="parallel=8" -i -us -uc -b
shutdown -h now   # to exit the container

这是关于如何使用 lxc 在 64 位主机上构建 32 位 wine的 wiki 页面。

于 2014-07-11T12:01:27.650 回答
8

对于 C++,你可以这样做:

export CXXFLAGS=-m32

这适用于 cmake。

于 2014-11-04T23:40:11.157 回答
6

一种方法是设置 chroot 环境。Debian 有许多工具,例如debootstrap

于 2009-08-13T14:45:01.667 回答