C++ Boost的vcpkg端口。测试无法链接
我们刚刚从自己的Boost编译切换到vcpkg的一个(1.73.0),vcpkg自动与visualstudio集成。我们没有使用CMake 一切都很好,但有些项目使用Boost.Test,更具体地说是链接器错误,如: boost_unit_test_framework-vc140-mt-gd.lib(boost_unit_test_framework-vc141-mt-gd-x32-1_73.dll):错误LNK2005:“public:static class boost::unit_test::unit_test_log_t&_cdeclboost::unit_test::unit_test::unit_test_log_t::instance(void)”(?instance@unit_test_log_t@单位_test@boost@@SAAAV123@XZ)已在AAA.obj[c:\src\AAA\AAA.vcxproj]中定义 boost\u unit\u test\u framework-vc140-mt-gd.lib(boost\u unit\u test\u framework-vc141-mt-gd-x32-1\u 73.dll):错误LNK2005:“public:virtual\u thistcall boost::unit\u test::lazy\u ostream::~lazy\u ostream(void)”(?1lazy)_ostream@un它_test@boost@@UAE@XZ)已在AAA.obj[c:\src\AAA\AAA.vcxproj]中定义 我检查了几个问题和其他问题报告(如),但所有描述似乎都没有问题:C++ Boost的vcpkg端口。测试无法链接,c++,boost,linker-errors,vcpkg,C++,Boost,Linker Errors,Vcpkg,我们刚刚从自己的Boost编译切换到vcpkg的一个(1.73.0),vcpkg自动与visualstudio集成。我们没有使用CMake 一切都很好,但有些项目使用Boost.Test,更具体地说是链接器错误,如: boost_unit_test_framework-vc140-mt-gd.lib(boost_unit_test_framework-vc141-mt-gd-x32-1_73.dll):错误LNK2005:“public:static class boost::unit_test
- 正确的三元组(x86 windows)
- 一切都是动态的
- 正确的运行时版本(用于发布的多线程DLL,用于调试的多线程调试DLL)
- 没有手动链接的文件
BOOST\u ALL\u NO\u LIB
),强制使用动态库(BOOST\u DYN\u link
),但没有任何效果
有什么我遗漏的吗?当我意识到一些使用Boost.Test的项目编译成功后,我开始将它们与失败的项目进行比较,并发现问题的根源:定义测试应用程序主要部分的文件使用的是框架的附带版本:
#define BOOST_TEST_MAIN
#include <boost/test/included/unit_test.hpp>
#定义BOOST_TEST_MAIN
#包括
其余测试均使用链接版本:
#包括
将main的头文件更改为链接的对应文件使错误消失:
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
#定义BOOST_TEST_MAIN
#包括
它与我们的Boost编译一起正常工作,但显然vcpkg不喜欢这种混合
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>