2017-08-25 3 views
5

ブーストユニットテストのドキュメントでは、ブーストユニットテストライブラリとリンクするためにを定義する必要があると具体的に述べています。私は/ライブラリパスを含めると、コードがうまくコンパイルが、私は、Visual Studioを使用して、昇圧ユニットテストをコンパイルしたときに彼らに私を実行しようBOOST_TEST_DYN_LINKを定義するとVisual Studioでアプリケーションがクラッシュする

#define BOOST_TEST_DYN_LINK 
#define BOOST_TEST_MODULE test_module1 

// This header is for the dynamic library, not the header only one 
#include <boost/test/unit_test.hpp> 

BOOST_AUTO_TEST_CASE(test1) { 
    BOOST_CHECK(true); 
} 

私はブーストを追加しました:

私は、この基本的な例を使用しています...私は、このエラーメッセージはまったくどのように漠然としていない便利指摘する必要があるように私は感じ

The application was unable to start correctly (0xc000003b).

:次のエラーを取得します

何らかの理由で、#define BOOST_TEST_DYN_LINKという行が削除された場合、コードはコンパイルされて正常に実行されますが、これはブーストの文書に記載されている内容と直接関係します。

どうしてですか?


追加情報:

これは私が使用していますものです:

ブーストv1_63_0

enter image description here

+1

スクリーンショットとしてエラーや情報を投稿しないでください。代わりにそれらをテキストとして投稿してください。あなたのスクリーンショットはあなたがVS14を使っていることを示していますが、あなたはVS13でタグ付けしています。なぜあなたがIDEのバージョンを言及しているのかも分かりません。 IDE!=コンパイラ。 MSVCのバージョン(VSに付属のC/C++コンパイラ)を挙げると、はるかに役立ちます。 – tambre

+0

おっと!私は間違ったバージョンにタグを付けました。私はそれを修正します。 – tjwrona1992

+0

MSVCのバージョンは14.0 – tjwrona1992

答えて

3

コードの実行に問題はありません。だから私は、あなたのケースではビルドの問題があるとは思わない。

bootstrap.bat 
.\b2.exe toolset=msvc -j 2 --with-test release link=shared stage 

あなたは、あなたのパスにどこかにステージ\ libに下のDLLをコピーして、適切なブーストディレクトリを追加する必要があります。私のブーストは(ブーストソースディレクトリに行った後)、このように構築されている

あなたの環境に

cl /EHsc /MD test.cpp 
.\test.exe 
+0

私はブーストソースを自分で作成しましたが、途中で間違いを犯した可能性があります。私はもう一度やり直すと思います。 – tjwrona1992

0

Visual Studioを使用する場合、単にBOOST_TEST_DYN_LINKを定義していません。

私たちのユニットメインファイルだけ含まれています。それはVisual StudioMinGwの両方を使用してGCCWindows上を使用してLinuxで正常に動作

#ifndef _MSC_VER 
#define BOOST_TEST_DYN_LINK 
#endif 
#define BOOST_TEST_MAIN 
#define BOOST_TEST_MODULE Main 
#include <boost/test/unit_test.hpp> 

+0

それは私が使用しようとしていた解決策でしたが、私は***なぜそれが動作しないのだろうかと思っています。私はどこにでも理由が書かれているとは思えません。ブースト・ドキュメンテーションには、BOOST_TEST_DYN_LINK定義が必要です。 – tjwrona1992

+0

解決策はあなたのために働いてうれしいです@ tjwrona1992。 **なぜ**それは動作しません:私は確かに分かりません。あなたの質問タグの1つを 'boost-test'に変更して**知っている人を見つけることをお勧めします** – kenba

+0

Thanks @kenba、私は新しいタグで質問を更新しました。 – tjwrona1992

1

なぜ、このに関して:何の問題もなく、その後

set INCLUDE=%BOOST_ROOT%;%INCLUDE% 
set LIB=%BOOST_ROOT%\stage\lib;%LIB% 

私は正常にテストコードをビルドすることができます:私のコマンドライン環境のために、私は(あなたがset BOOST_ROOT=C:\src\boost_1_65_1のようなものを行っていると仮定)しています確かにあなたのコードに静的および動的(dll)バリアントを含める/注入するためです。これは、Boostがコンパイラの自動リンク機能を使用するため、MSVCで発生する可能性があります。私は常にBOOST_ALL_NO_LIBを使って自動リンクを無効にし、リンクされたライブラリを完全に制御します。

特に、オートリンクライブラリを使用すると、リンクオプションで表示されないため、問題を引き付けにくくなります。

関連する問題