定义BOOST_TEST_DYN_LINK会导致应用程序在Visual Studio中崩溃
在增强单元测试文档中,它明确指出您需要定义BOOST_TEST_DYN_LINK以便与增强单元测试库链接。定义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);
}
我已经加入推动我包括/库路径和代码编译罚款,但是当我编译使用Visual Studio升压单元测试,并尝试运行它们我出现以下错误:
The application was unable to start correctly (0xc000003b).
我觉得我只是需要指出的是此错误消息是一切是如何模糊,没有帮助...
由于某些原因,如果我删除了行#define BOOST_TEST_DYN_LINK
,代码将编译并成功运行,但这直接违背了boost文档的说明。
这是怎么发生的?
附加信息:
这是我在用的:
升压v1_63_0
我没有任何问题运行你的代码。所以我怀疑你的情况存在构建问题。
我升压建立这样(要Boost的源目录后):
bootstrap.bat
.\b2.exe toolset=msvc -j 2 --with-test release link=shared stage
然后,您需要将DLL文件下阶段\ lib中某处的路径复制到,并添加恰当的增压目录到你的环境。对于我的命令行环境,我已(假设你已经做了类似set BOOST_ROOT=C:\src\boost_1_65_1
):
set INCLUDE=%BOOST_ROOT%;%INCLUDE%
set LIB=%BOOST_ROOT%\stage\lib;%LIB%
然后我可以成功地建立自己的测试代码没有任何问题:
cl /EHsc /MD test.cpp
.\test.exe
我自己构建了boost源,但可能我在这个过程中犯了一个错误。我想我会再试一次。 – tjwrona1992
然后使用Visual Studio的时候根本就没有定义BOOST_TEST_DYN_LINK
。
我们单位主文件只包含:
#ifndef _MSC_VER
#define BOOST_TEST_DYN_LINK
#endif
#define BOOST_TEST_MAIN
#define BOOST_TEST_MODULE Main
#include <boost/test/unit_test.hpp>
它同时使用Visual Studio
和MinGw
使用GCC
和Windows
运行在Linux
罚款。
这是我计划使用的解决方案,但我想知道***为什么它不起作用。我似乎无法找到任何地方记录的原因,boost文档说明需要'BOOST_TEST_DYN_LINK'定义才能工作。 – tjwrona1992
我很高兴该解决方案适用于您@ tjwrona1992。至于**为什么**它不起作用:我不知道。我建议你将你的一个问题标签改为'boost-test'来找到一个知道**为什么**的人...... – kenba
谢谢@kenba,我已经用新标签更新了问题。 – tjwrona1992
关于为什么,这当然是因为你在代码中包含/注入静态和动态(dll)变体。这可能发生在MSVC中,因为Boost使用编译器的自动链接功能。我总是使用BOOST_ALL_NO_LIB
来禁用自动链接并完全控制链接的库。
特别是,自动链接库在使用时,在链接选项上不可见,这使得难以捕捉到问题。
请勿将错误或信息作为屏幕截图发布。改为将它们发布为文本。你的屏幕截图显示你正在使用VS14,但你用VS13标记。也不知道你为什么提到IDE版本。 IDE!=编译器。提到MSVC版本(VS附带的C/C++编译器)会更有帮助。 – tambre
哎呀!我标记了不正确的版本。我会解决这个问题。 – tjwrona1992
而MSVC版本是14.0 – tjwrona1992