131

64ビットシステムで32ビットでプロジェクトをコンパイルすることは可能ですか?おそらくそうですが、どうすればよいですか?cmakegcc

パラメータ/フラグなどを設定せずに「無知」な方法で試したところ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
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
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の新しいバージョンでは、各ターゲットでそれを行う1つの方法は次のとおりです。

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 ビットのワインをビルドする方法は次のとおりです。

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 に答える
6

1 つの方法は、chroot 環境をセットアップすることです。Debian には、 debootstrapなど、そのためのツールがいくつかあります。

于 2009-08-13T14:45:01.667 に答える