6

Launchyのソースをダウンロードし、Visual Studio 2005 でビルドしようとしています。Launchy プロジェクトは VC7 を使用してビルドされているため、プロジェクト ファイルを VC8 に更新する必要がありましたが、そのプロセスはうまくいったようです。ただし、 Launchy はBoost 1.33.1 ライブラリも使用しており、私がビルドしたのは Boost 1.41.0 ライブラリ (最新のライブラリをより簡単にビルドできるようにするための Boost の小道具) であるため、プロジェクトを更新して新しいライブラリを指すようにしました。ライブラリのインストールを促進します。今、私は次のリンカエラーを受け取ります:

fatal error LNK1104: cannot open file 'libboost_regex-vc80-mt-sgd-1_41.lib'

Boost libディレクトリを調べたところ、見つけた最も近いものは...

libboost_regex-vc80-mt-gd-1_41.lib

「s」がないことに注意してください。ライブラリの違いが何であるか、Visual Studio が間違ったものを探しているのか、Boost ビルド プロセスが正しいライブラリをビルドできなかったのかがわかりません。誰かが私を正しい方向に向けることができますか?

実験として、私が持っている正規表現ライブラリのコピーを作成し、リンカーが探しているものに名前を変更しました。これにより、msvcrtd.lib で既に定義されているシンボルに関するリンカー エラーの長いリストが表示されます。たとえば、次のようになります。

error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)

Boost 1.33.1 ライブラリをビルドして、代わりに Launchy プロジェクト ファイルをそこに向けます。しかし、Boost 1.41.0 ライブラリの何が問題なのかを知りたいです。

編集: Boostドキュメントで「s」ライブラリとは何かへの参照を見つけました:

このライブラリは、C++ 標準ライブラリおよびコンパイラ ランタイム サポート ライブラリに静的にリンクする場合に使用します。

したがって、「s」ライブラリが正しいもののようです。あとは、それらをどのように構築するかを考えなければなりません。

解決策: 次のコマンド ラインを使用して、不足しているブースト ライブラリをビルドできました。

bjam --build-type=complete msvc stage

ブーストが存在するディレクトリですでにboostrap.batを実行した後、それを実行しました。

4

2 に答える 2

10

違いはBoost docsに明確に記載されています - 「mt-sgd」は「デバッグ、静的にリンクされたランタイムライブラリ、マルチスレッド、デバッグシンボル付き」を意味します。「mt-gd」も同じですが、動的にリンクされたランタイム ライブラリ (つまり、libcmtd.lib の代わりに msvcrtd.lib) を使用します。

動的 CRT リンク (/MTd ではなく /MDd) を使用するようにプロジェクト設定を変更するか、静的リンクを使用して Boost をビルドします。これらを混在させると正しく機能しません。

于 2009-11-26T20:15:56.530 に答える
3

ブーストを構築するためにどのコマンドを使用しましたか?build-type=completeを指定してみてください。通常は、slibもビルドする必要があります。

于 2009-11-26T20:21:07.790 に答える