3

Windows と UNIX の両方のバージョンをビルドする必要がある C++ コードベースがあります。cygwin などをインストールしなくても、Windows 実行可能ファイルが機能することが重要です。ああ、私はこれをubuntuから達成しようとしています。

ブーストビルドで処理する方法を見つけようとしてきましたが、これまでのところ不十分です..簡単にするために、次のプロジェクト構造を想定しています。

root/
|- src/
|  |- core/
|  |  |- number.cpp
|  |  |- number.hpp
|  |- main.cpp
|- jamroot

最初のステップとして、boost-build で Windows バイナリを作成するために、ホーム ディレクトリに次の内容を含む user-config.jam ファイルを作成します。

using gcc : 4.4 : i586-mingw32msvc-g++ : <rc>i586-mingw32msvc-windres <archiver>i586-mingw32msvc-ar ;

私の jamroot ファイルは次のようになります。

exe hello :
    [ glob-tree *.cpp ]
    : : <target-os>windows
;

しかし、実行するbjamと、UNIX 実行可能ファイル (拡張子なし) が取得されますが、Windows 実行可能ファイルは取得されません。アプリケーションの名前を .exe 拡張子に変更して Windows で実行しても機能しません。bjam --toolset=gcc --target-os=windowsなど、bjamのさまざまなオプションを試しましたが、うまくいくようbjam --toolset=gcc-mingw --target-os=windowsです..

記録として、mingw は適切にインストールされ、動作しています。コンパイラを手動で呼び出すと、正しい出力ファイルが生成されます。

何か案は?

また、user-config.jam ファイルにリストされている各ツールセットのバージョンを bjam にビルドさせるにはどうすればよいですか?

おまけの質問: 最終的に、1 つのブースト ライブラリと 1 つのカスタム ビルド済みライブラリにリンクする必要があります。ターゲット システムごとに異なるライブラリを指定するにはどうすればよいですか?

更新私はhttp://mingw-cross-env.nongnu.org/からスクリプトをダウンロードしました。 bjam に mingw コンパイラーを呼び出させます (私は別のコンピューターにいるので、現時点では解決策を提供できません)。他の質問はまだ解決されていません。

4

2 に答える 2

1

残念ながら、これはできないと思います (私は何度も失敗しました)。その理由は、mingw が Boost のコンパイルをサポートしていないためだと思います。人々がこれを達成したと思われる唯一の方法は、MS Visual Studio を使用して win32 で別のビルド環境を維持することです。

あなたの質問から、bjam を使用してアプリケーションをビルドしているのか、それとも後からアプリケーションにリンクするために Boost ライブラリ (.lib または .dll ファイル) の Windows バージョンをビルドしようとしているだけなのかが不明です。私の試みでは、Boost ライブラリの Windows バージョンがコンパイルされ、アプリが mingw32 で個別にコンパイルされ、Boost にリンクされるという「通常の」方法でこれを実行しようとしました。

残念ながら、これまでの私のつまずきは、2 つの結果しか得られないことです。Boost を Win32 動的ライブラリ (.dll) にコンパイルするときにビルドが失敗するか、win32 静的ライブラリが正常にビルドされた後、libtool がそれらをアプリにリンクすることを拒否します。 .

Arch Linux が mingw32-boost をコンパイルするために使用するPKGBUILDファイルを見てください。彼らのやり方からヒントが得られるかもしれません。bjam threadapi=win32 target-os=windowsそれで十分のようです。ただし、プレフィックスを正しく設定することを忘れないでください。そうすれば、ネイティブ ライブラリが win32 バージョンで上書きされません。

于 2011-04-28T01:48:34.337 に答える