2017-11-07 8 views
1

Microsoft Visual Studio 14 2015(AppVeyor上)でBoost.Testを使用してテストをビルドして実行しようとしています。それは常に通過し、決して投げる必要がありますので、私のテストケースは、次のように定義されています。私のようなテストのためのリンケージを設定CMakeのスクリプトでBoost.Testが異常終了しました。例外:MSVCのその他

#define BOOST_TEST_MODULE target_boost_test 
#define BOOST_TEST_DYN_LINK 
#include <boost/test/unit_test.hpp> 

BOOST_AUTO_TEST_CASE(testcase) 
{ 
    BOOST_CHECK(true); 
} 

find_package(Boost REQUIRED COMPONENTS unit_test_framework) 
include_directories(${Boost_INCLUDE_DIRS}) 
... 
add_executable(${UT_TARGET} ${UT_SOURCE}) 
target_link_libraries(${UT_TARGET} ${LIBRARIES} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) 

テストがどのなし罰金コンパイル警告は表示されますが、実行されず、かなり不明確なエラーが発生します***Exception: Other

Test project C:/projects/msvc-boost-test/build 
    Start 1: target_boost_test 
1/1 Test #1: target_boost_test ................***Exception: Other 0.08 sec 

簡単に私は問題を表示するAppVeyorに必要なすべてのファイルとGitHubの上のレポや自動ビルドジョブを設定している再現します。この場合、

+0

これは関連しているようですが、答えはありません:[mongo-cxx-driverライブラリはビルドされますが、永続的なリンクとデバッグの問題があります](https://stackoverflow.com/questions/39982310) –

+1

矛盾したDLLバージョンビルド時とランタイム時に使用されます。たとえばあなたと確認できますか?依存関係ビューア? Linuxでは、問題はありません:https://i.imgur.com/WTNpaBg.png – sehe

+0

@seheありがとうございました。 Linuxでも問題は発生しません。残念ながら私はWindowsマシンを持っていないだけで、AppVeyorを使ってプロジェクトのクロスプラットフォームを構築したいだけです。私はビルドアーチファクトをエクスポートし、それをLinux上で検査しようとします。 –

答えて

1

[感謝は右のトラックに私を取得するため@seheする]


例外が見つからないBoost.Test DLLによって引き起こされました。ダイナミックリンカがDLLを自動的に見つけることができない理由を知るためには、あまりにもWindowsに慣れていません。これまで私はこの状況に対して2つの回避策/修正点を見つけました。最初は私が好む方法です。どうやら

environment: 
    BOOST_LIBRARYDIR: "C:\\Libraries\\boost_1_59_0\\lib64-msvc-14.0" 
    PATH: "%BOOST_LIBRARYDIR%;%PATH%" 

2.コピーしたDLLと同じディレクトリに

を:

1.これは、このように見えた私のAppVeyor YAMLの設定の場合、PATH

にDLLのパスを追加します。動的リンカは常に作業ディレクトリ(または実行可能ファイルのディレクトリ?私は知らない)を検索します。再び私AppVeyor YAMLの設定で、これはこのように見え、また働いた上でDLLをコピー:それは明示的にDLLの名前を指定する必要がよう

after_build: 
    - cmd: copy "%BOOST_LIBRARYDIR%\boost_unit_test_framework-vc140-mt-gd-1_59.dll" . 

これは、あまり一般的なソリューションです。したがって、デバッグモードからリリースモードに切り替えるときにも、DLL名を変更する必要があります。


質問からのレポの内容は、作業バージョンでthis Gistに要約されています。

+1

最も簡単な解決策は、をインクルードすることで、ヘッダのみのライブラリとしてboost testを使うことです。 – VTT

+0

@VTT入力いただきありがとうございます。 Boost.Testの場合、これは確かに正確で賢明なアプローチですが、他のBoostライブラリはヘッダーのみしか存在せず、同じ問題を引き起こします。 –

関連する問題