64-bitシステムでcmake
およびgcc
を使用して2-bitでプロジェクトをコンパイルすることはできますか?おそらくそうですが、どうすればいいですか?
パラメータやフラグなどを設定せずに「無知」な方法で試してみたときに、LD_LIBRARY_PATH
を設定して~/tools/lib
内のリンクされたライブラリを見つけると、無視され、lib64。
export CFLAGS=-m32
$ gcc test.c -o testc $ file testc testc:ELF 64ビットLSB実行可能ファイル、x86-64、バージョン1(SYSV)、動的リンク(共有を使用) libs)、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)
要するに、32ビットバイナリをコンパイルするには-m32
フラグを使用します。
また、必要なすべてのライブラリの32ビットバージョンがインストールされていることを確認してください(私の場合、Fedoraで必要なのはglibc-devel.i386のみでした)
CMakeの以降のバージョンでは、各ターゲットでそれを行う1つの方法は次のとおりです。
set_target_properties(MyTarget PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
私はそれをグローバルに行う方法を知りません。
C++の場合:
export CXXFLAGS=-m32
これはcmakeで機能します。
1つの方法は、chroot環境をセットアップすることです。 Debianには、そのためのツールがいくつかあります。たとえば、 debootstrap
複雑なアプリケーションでは、 lxc container を使用することをお勧めします。 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ビットワインをビルドする方法 に関するWikiページを次に示します。