4

Windows で Visual Studio 2008 を使用して C++ Net Lib プロジェクトをコンパイルするには、コンセプト チェックを無効にする必要があります (このスレッドを参照してください: https://groups.google.com/forum/#!msg/cpp-netlib/G-hM25EnCWA/ gdsHBaVfmggJ )

コンパイルはリリースでは機能しますが、デバッグでは機能しません (.c​​pp コンパイルでの失敗)

クライアントヘッダーを含める前に NDEBUG を定義することで、ヘッダーのコンパイルを成功させることができました。ただし、後でリンカーが Boost.system ライブラリのリリース バージョンにリンクしようとすると、これは失敗します。デバッグを使用しているときに。このエラーが発生します:

6>リンク: 致命的なエラー LNK1104: ファイル 'libboost_system-vc90-mt-1_50.lib' を開けません

BOOST_SYSTEM_NO_LIBでこれを防ぎたかったのですが、それでもリリースバージョンに対してリンクしたいのです(私のプロジェクトは「libboost_system-vc90-mt-gd-1_50.lib」(デバッグライブラリ)に対してリンクしています)

リリース ビルドで行われるように、ヘッダーを含める前に定義し、Boost.ConceptCheck を無効にする簡単なマクロはありますか? Boost のドキュメントにも、ヘッダー ファイル自体にも、情報は見つかりませんでした。

どうもありがとう

ゲータン

4

1 に答える 1

3

これが私がすることです:

#include <boost/concept/assert.hpp>
// redefine concept assert, suppress the warning etc.
#undef BOOST_CONCEPT_ASSERT
#define BOOST_CONCEPT_ASSERT(Model)
#include <boost/concept_check.hpp>

struct not_an_iterator
{};


int main()
{
  BOOST_CONCEPT_ASSERT((InputIterator<not_an_iterator>));
  return 0;
}

これにより、concept_assert は何もしなくなりますが、あいまいに見えるリンカ エラーを防ぐことにはならないのではないかと心配しています。

于 2012-12-18T10:37:20.043 に答える