定义BOOST_TEST_DYN_LINK会导致应用程序在Visual Studio中崩溃

tjw*_*992 5 c++ boost dynamic-linking boost-test visual-studio-2015

在增强单元测试文档中,它明确指出您需要定义BOOST_TEST_DYN_LINK以便与增强单元测试库链接.

我正在使用这个基本的例子:

#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);
}
Run Code Online (Sandbox Code Playgroud)

我已经为我的include/library路径添加了boost并且代码编译得很好,但是当我使用Visual Studio编译boost单元测试并尝试运行它们时,我收到以下错误:

应用程序无法正确启动(0xc000003b).

我觉得我只需要指出这个错误信息是多么含糊和没有帮助......

出于某种原因,如果我删除该行#define BOOST_TEST_DYN_LINK代码将编译并成功运行,但这直接违反了boost文档所说的内容.

为什么会这样?


附加信息:

这就是我正在使用的:

提升v1_63_0

在此输入图像描述

Yon*_* Wu 4

我运行你的代码没有任何问题。所以我怀疑你的情况存在构建问题。

我的 boost 是这样构建的(进入 Boost 源目录后):

bootstrap.bat
.\b2.exe toolset=msvc -j 2 --with-test release link=shared stage
Run Code Online (Sandbox Code Playgroud)

然后,您需要将 stage\lib 下的 DLL 复制到路径中的某个位置,并将适当的 Boost 目录添加到您的环境中。对于我的命令行环境,我有(假设您已经做了类似的事情set BOOST_ROOT=C:\src\boost_1_65_1):

set INCLUDE=%BOOST_ROOT%;%INCLUDE%
set LIB=%BOOST_ROOT%\stage\lib;%LIB%
Run Code Online (Sandbox Code Playgroud)

然后我就可以毫无问题地成功构建您的测试代码:

cl /EHsc /MD test.cpp
.\test.exe
Run Code Online (Sandbox Code Playgroud)