Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost的vcpkg端口。测试无法链接_C++_Boost_Linker Errors_Vcpkg - Fatal编程技术网

C++ Boost的vcpkg端口。测试无法链接

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

我们刚刚从自己的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]中定义

我检查了几个问题和其他问题报告(如),但所有描述似乎都没有问题:

  • 正确的三元组(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>