gpt4 book ai didi

c++ - Boost.Test 崩溃并出现 ***Exception : Other on MSVC

转载 作者:行者123 更新时间:2023-11-30 05:07:45 25 4
gpt4 key购买 nike

我正在尝试使用 Boost.Test 构建和运行测试在 Microsoft Visual Studio 14 2015(在 AppVeyor 上)。我的测试用例是这样定义的,所以它应该总是通过并且永远不会抛出:

#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);
}

在 CMake 脚本中,我为测试设置了这样的链接:

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

为了轻松重现,我在 GitHub 上建立了一个包含所有必要文件的存储库,并在 AppVeyor 上建立了一个自动构建作业来显示问题。

最佳答案

[非常感谢@sehe 让我走上正轨]


在这种情况下,异常是由未找到 Boost.Test DLL 引起的。我对 Windows 太陌生,不知道为什么动态链接器不能自动找到 DLL。到目前为止,我已经找到了针对这种情况的两种解决方法/修复方法。第一种是我的首选方式。

1。将DLL路径添加到PATH

在我的 AppVeyor YAML 配置中,它看起来像这样:

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

2。复制DLL到同一目录

显然动态链接器总是搜索工作目录(或可执行文件的目录?我不知道)。复制 DLL 也有效,再次在我的 AppVeyor YAML 配置中看起来像这样:

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

这是不太通用的解决方案,因为它需要明确指定 DLL 的名称。因此,当从 Debug模式切换到 Release模式时,还必须调整 DLL 名称。


问题中 repo 的内容总结在 this Gist 中。在工作版本中。

关于c++ - Boost.Test 崩溃并出现 ***Exception : Other on MSVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47168753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com