Boost.Test 的 vcpkg 端口无法 link
vcpkg port of Boost.Test fails to link
我们刚刚从我们自己的 Boost 编译切换到 vcpkg 的编译 (1.73.0),自动 vcpkg 与 Visual Studio 集成。我们没有使用 CMake。
一切都编译正常,但一些项目使用 Boost.Test,更具体地说有 linker 错误,如:
boost_unit_test_framework-vc140-mt-gd.lib(boost_unit_test_framework-vc141-mt-gd-x32-1_73.dll) : error LNK2005: "public: static class boost::unit_test::unit_test_log_t & __cdecl boost::unit_test::unit_test_log_t: :instance(void)" (?instance@unit_test_log_t@unit_test@boost@@SAAAV123@XZ) already defined in AAA.obj [c:\src\AAA\AAA.vcxproj]
boost_unit_test_framework-vc140-mt-gd.lib(boost_unit_test_framework-vc141-mt-gd-x32-1_73.dll) : error LNK2005: "public: virtual __thiscall boost::unit_test::lazy_ostream::~lazy_ostream(void)" (??1lazy_ostream@un it_test@boost@@UAE@XZ) already defined in AAA.obj [c:\src\AAA\AAA.vcxproj]
我已经检查了几个问题和其他问题报告(如 this one),但所有描述似乎都没有问题:
- 正确的三元组 (x86-windows)
- 一切都是动态的
- 正确的运行时版本(多线程 DLL 用于发布,多线程调试 DLL 用于调试)
- 没有手动 linked 文件
我也试过禁用自动link(BOOST_ALL_NO_LIB
),强制动态库(BOOST_DYN_LINK
),但没有任何效果。
有什么我遗漏的吗?
在我意识到一些使用 Boost.Test 的项目编译成功后,我开始将它们与失败的项目进行比较,并发现了问题的根源:定义测试应用程序主体的文件正在使用包含 框架版本:
#define BOOST_TEST_MAIN
#include <boost/test/included/unit_test.hpp>
其余测试使用链接版本:
#include <boost/test/unit_test.hpp>
将 main 的头文件更改为 linked 副本使错误消失:
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
它在我们的 Boost 编译中工作正常,但很明显 vcpkg 不喜欢这种混合。
我们刚刚从我们自己的 Boost 编译切换到 vcpkg 的编译 (1.73.0),自动 vcpkg 与 Visual Studio 集成。我们没有使用 CMake。
一切都编译正常,但一些项目使用 Boost.Test,更具体地说有 linker 错误,如:
boost_unit_test_framework-vc140-mt-gd.lib(boost_unit_test_framework-vc141-mt-gd-x32-1_73.dll) : error LNK2005: "public: static class boost::unit_test::unit_test_log_t & __cdecl boost::unit_test::unit_test_log_t: :instance(void)" (?instance@unit_test_log_t@unit_test@boost@@SAAAV123@XZ) already defined in AAA.obj [c:\src\AAA\AAA.vcxproj]
boost_unit_test_framework-vc140-mt-gd.lib(boost_unit_test_framework-vc141-mt-gd-x32-1_73.dll) : error LNK2005: "public: virtual __thiscall boost::unit_test::lazy_ostream::~lazy_ostream(void)" (??1lazy_ostream@un it_test@boost@@UAE@XZ) already defined in AAA.obj [c:\src\AAA\AAA.vcxproj]
我已经检查了几个问题和其他问题报告(如 this one),但所有描述似乎都没有问题:
- 正确的三元组 (x86-windows)
- 一切都是动态的
- 正确的运行时版本(多线程 DLL 用于发布,多线程调试 DLL 用于调试)
- 没有手动 linked 文件
我也试过禁用自动link(BOOST_ALL_NO_LIB
),强制动态库(BOOST_DYN_LINK
),但没有任何效果。
有什么我遗漏的吗?
在我意识到一些使用 Boost.Test 的项目编译成功后,我开始将它们与失败的项目进行比较,并发现了问题的根源:定义测试应用程序主体的文件正在使用包含 框架版本:
#define BOOST_TEST_MAIN
#include <boost/test/included/unit_test.hpp>
其余测试使用链接版本:
#include <boost/test/unit_test.hpp>
将 main 的头文件更改为 linked 副本使错误消失:
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
它在我们的 Boost 编译中工作正常,但很明显 vcpkg 不喜欢这种混合。