次のすべてのプラットフォームで実行する必要があるプロジェクトがあります。
- x86 勝利
- x64 勝利
- Linux(Debian)x86
- Linux(Debian)x64
WindowsとLinux x64のコンパイルを行いましたが、うまくいくかどうかはわかりません。 1つのプラットフォームが欠けていますが、それはLinux x86です。 x64/x32を気にしないmakefileがあります。 32ビット構成を追加する必要があります。私は次のことでこれを行うことができることを学びましたmake
。
make configuration CFLAGS=-m32
しかし、実際に実際の32ビットビルドを実行しているかどうかはわかりません。コマンドを使用するとコンパイルは発生しません。1プログラムがリンクフェーズに直接移動すると、互換性のないライブラリについて文句を言います。2:
/usr/bin/ld: cannot find -lboost_system
/usr/bin/ld: skipping incompatible /usr/lib//liblog4cplus.so when searching for -llog4cplus
/usr/bin/ld: skipping incompatible /usr/lib//liblog4cplus.a when searching for -llog4cplus
/usr/bin/ld: skipping incompatible /usr/local/lib/liblog4cplus.so when searching for -llog4cplus
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../liblog4cplus.so when searching for -llog4cplus
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../liblog4cplus.a when searching for -llog4cplus
/usr/bin/ld: skipping incompatible //usr/local/lib/liblog4cplus.so when searching for -llog4cplus
/usr/bin/ld: skipping incompatible //usr/lib/liblog4cplus.so when searching for -llog4cplus
/usr/bin/ld: skipping incompatible //usr/lib/liblog4cplus.a when searching for -llog4cplus
/usr/bin/ld: cannot find -llog4cplus
/usr/bin/ld: skipping incompatible /usr/local/ssl/lib//libcrypto.a when searching for -lcrypto
/usr/bin/ld: cannot find -lcrypto
これは、マルチアーキテクチャプログラムの開発に慣れている人に2つの質問を提起します。
- 図書館の管理方法は?手動でビルドする必要がありますか?
- makefileを正しく作成する方法は? 32ビット版と64ビット版は異なる場所にインストールする必要があります。
注1:私はこれが起こっていることに気付かなかったmake clean
。ただし、64ビットと32ビットはフォルダを共有しないでください。
ノート2:これには-lstdc++
C ++標準ライブラリが含まれます。つまり私にはそんなことすらないという意味だ。
答え1
異なるアーキテクチャのターゲットファイルが異なるディレクトリに書き込まれるようにビルドスクリプトを設定する必要があります。 Windows オブジェクトと Unix オブジェクトは異なるファイル名 (*.obj
および) を使用するため、自然に競合はありませんが、*.exe
Unixシステムは同じファイル名を使用します。*.o
*
または、各ビルドのソースコードを別のディレクトリに抽出します。
ライブラリの場合は、32ビット(…:i386
)開発パッケージとデフォルトの64ビット開発パッケージをインストールする必要があります。または、chrootでの32ビットインストールの設定これは、数GBのディスク容量を使用しますが、メンテナンスが非常に少なく、実行中のディストリビューション以外の配布用のパッケージを確実に作成する最も簡単な方法です。