Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hypodermic 2.5.3 won't link with Boost #56

Open
Bluesman74 opened this issue Aug 31, 2023 · 0 comments
Open

Hypodermic 2.5.3 won't link with Boost #56

Bluesman74 opened this issue Aug 31, 2023 · 0 comments

Comments

@Bluesman74
Copy link

A while back I installed your library so that I could look at the code that David Sackstein presented in his CppCon 2022 presentation 10 Tips for Cleaner C++ code.

I've been trying to get his code running under VS2022 Preview which currently fails, and so I've revisited it, as part of demonstrating to MS that the preview has now broken the code from the presentation.

I tried upgrading both of the third party libraries tl::expected and Hypodermic.

However when it came to trying to build version 2.5.3 I find it doesn't link properly, unfortunately I threw away my previous copy of your library and so I don't know what version I was working from. I looked for old .zip files and it looks like I must previously have just cloned the repository at the time, and so now I can't go back.

When I encountered the errors in VS2022, I tried again to build Hypodermic in VS2019 but the same errors occur.

[19/20] Linking CXX executable Hypodermic.Tests\Hypodermic.Tests.exe
  FAILED: Hypodermic.Tests/Hypodermic.Tests.exe 
  cmd.exe /C "cd . && "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_exe --intdir=Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100226~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100226~1.0\x64\mt.exe --manifests  -- C:\PROGRA~2\MICROS~4\2019\PROFES~1\VC\Tools\MSVC\1429~1.301\bin\Hostx64\x64\link.exe /nologo Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\main.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\CircularDependencyTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\ContainerBuilderTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\ContainerTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\DefaultConstructibleTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\FactoryTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\IsCompleteTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\MemoryTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\NamedTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\NestedContainerTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\PerformanceTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\PersistentInstanceRegistrationTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\ProvidedDependenciesTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\ProvidedInstanceFactoryRegistrationTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\ProvidedInstanceRegistrationTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\RegistrationTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\RuntimeRegistrationTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\UseIfNoneTests.cpp.obj  /out:Hypodermic.Tests\Hypodermic.Tests.exe /implib:Hypodermic.Tests\Hypodermic.Tests.lib /pdb:Hypodermic.Tests\Hypodermic.Tests.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console -LIBPATH:C:\'Boost\boost_1_81_0\lib C:\'Boost\boost_1_81_0\lib\libboost_system-vc142-mt-gd-x64-1_81.lib  C:\'Boost\boost_1_81_0\lib\libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cmd.exe /C "cd /D C:\Dev\Libraries\Hypodermic\out\build\x64-Debug\Hypodermic.Tests && C:\Dev\Libraries\Hypodermic\out\build\x64-Debug\Hypodermic.Tests\Hypodermic.Tests""
  LINK Pass 1: command "C:\PROGRA~2\MICROS~4\2019\PROFES~1\VC\Tools\MSVC\1429~1.301\bin\Hostx64\x64\link.exe /nologo Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\main.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\CircularDependencyTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\ContainerBuilderTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\ContainerTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\DefaultConstructibleTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\FactoryTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\IsCompleteTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\MemoryTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\NamedTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\NestedContainerTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\PerformanceTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\PersistentInstanceRegistrationTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\ProvidedDependenciesTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\ProvidedInstanceFactoryRegistrationTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\ProvidedInstanceRegistrationTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\RegistrationTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\RuntimeRegistrationTests.cpp.obj Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir\UseIfNoneTests.cpp.obj /out:Hypodermic.Tests\Hypodermic.Tests.exe /implib:Hypodermic.Tests\Hypodermic.Tests.lib /pdb:Hypodermic.Tests\Hypodermic.Tests.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console -LIBPATH:C:\'Boost\boost_1_81_0\lib C:\'Boost\boost_1_81_0\lib\libboost_system-vc142-mt-gd-x64-1_81.lib C:\'Boost\boost_1_81_0\lib\libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir/intermediate.manifest Hypodermic.Tests\CMakeFiles\Hypodermic.Tests.dir/manifest.res" failed (exit code 1169) with the following output:
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "void __cdecl boost::unit_test::results_reporter::set_level(enum boost::unit_test::report_level)" (?set_level@results_reporter@unit_test@boost@@YAXW4report_level@23@@Z) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(results_reporter.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: enum boost::unit_test::log_level __cdecl boost::unit_test::unit_test_log_t::set_threshold_level(enum boost::unit_test::log_level)" (?set_threshold_level@unit_test_log_t@unit_test@boost@@QEAA?AW4log_level@23@W4423@@Z) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(unit_test_log.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.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@@SAAEAV123@XZ) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(unit_test_log.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: __cdecl boost::unit_test::framework::impl::master_test_suite_name_setter::master_test_suite_name_setter(class boost::unit_test::basic_cstring<char const >)" (??0master_test_suite_name_setter@impl@framework@unit_test@boost@@QEAA@V?$basic_cstring@$$CBD@34@@Z) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(framework.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: __cdecl boost::unit_test::global_configuration::global_configuration(void)" (??0global_configuration@unit_test@boost@@QEAA@XZ) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(test_tree.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: virtual __cdecl boost::unit_test::global_configuration::~global_configuration(void)" (??1global_configuration@unit_test@boost@@UEAA@XZ) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(test_tree.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: virtual __cdecl boost::unit_test::lazy_ostream::~lazy_ostream(void)" (??1lazy_ostream@unit_test@boost@@UEAA@XZ) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(framework.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: static class boost::unit_test::lazy_ostream & __cdecl boost::unit_test::lazy_ostream::instance(void)" (?instance@lazy_ostream@unit_test@boost@@SAAEAV123@XZ) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(framework.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "protected: __cdecl boost::unit_test::lazy_ostream::lazy_ostream(bool)" (??0lazy_ostream@unit_test@boost@@IEAA@_N@Z) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(framework.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: void __cdecl boost::unit_test::unit_test_log_t::set_checkpoint(class boost::unit_test::basic_cstring<char const >,unsigned __int64,class boost::unit_test::basic_cstring<char const >)" (?set_checkpoint@unit_test_log_t@unit_test@boost@@QEAAXV?$basic_cstring@$$CBD@23@_K0@Z) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(unit_test_log.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: __cdecl boost::test_tools::assertion_result::assertion_result(bool)" (??0assertion_result@test_tools@boost@@QEAA@_N@Z) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(test_tree.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: __cdecl boost::test_tools::assertion_result::~assertion_result(void)" (??1assertion_result@test_tools@boost@@QEAA@XZ) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(test_tree.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "bool __cdecl boost::test_tools::tt_detail::report_assertion(class boost::test_tools::assertion_result const &,class boost::unit_test::lazy_ostream const &,class boost::unit_test::basic_cstring<char const >,unsigned __int64,enum boost::test_tools::tt_detail::tool_level,enum boost::test_tools::tt_detail::check_type,unsigned __int64,...)" (?report_assertion@tt_detail@test_tools@boost@@YA_NAEBVassertion_result@23@AEBVlazy_ostream@unit_test@3@V?$basic_cstring@$$CBD@63@_KW4tool_level@123@W4check_type@123@3ZZ) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(test_tools.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: static class boost::unit_test::decorator::collector_t & __cdecl boost::unit_test::decorator::collector_t::instance(void)" (?instance@collector_t@decorator@unit_test@boost@@SAAEAV1234@XZ) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(decorator.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: __cdecl boost::unit_test::test_case::test_case(class boost::unit_test::basic_cstring<char const >,class boost::unit_test::basic_cstring<char const >,unsigned __int64,class boost::function<void __cdecl(void)> const &)" (??0test_case@unit_test@boost@@QEAA@V?$basic_cstring@$$CBD@12@0_KAEBV?$function@$$A6AXXZ@2@@Z) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(test_tree.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl boost::unit_test::ut_detail::normalize_test_case_name(class boost::unit_test::basic_cstring<char const >)" (?normalize_test_case_name@ut_detail@unit_test@boost@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$basic_cstring@$$CBD@23@@Z) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(test_tree.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: __cdecl boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(class boost::unit_test::test_case *,class boost::unit_test::decorator::collector_t &,unsigned long)" (??0auto_test_unit_registrar@ut_detail@unit_test@boost@@QEAA@PEAVtest_case@23@AEAVcollector_t@decorator@23@K@Z) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(test_tree.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: __cdecl boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(class boost::unit_test::basic_cstring<char const >,class boost::unit_test::basic_cstring<char const >,unsigned __int64,class boost::unit_test::decorator::collector_t &)" (??0auto_test_unit_registrar@ut_detail@unit_test@boost@@QEAA@V?$basic_cstring@$$CBD@23@0_KAEAVcollector_t@decorator@23@@Z) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(test_tree.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: __cdecl boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(int)" (??0auto_test_unit_registrar@ut_detail@unit_test@boost@@QEAA@H@Z) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(test_tree.obj)
C:\Dev\Libraries\Hypodermic\boost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(boost_unit_test_framework-vc142-mt-gd-x64-1_81.dll) : error LNK2005: "public: void __cdecl boost::test_tools::tt_detail::print_log_value<bool>::operator()(class std::basic_ostream<char,struct std::char_traits<char> > &,bool)" (??R?$print_log_value@_N@tt_detail@test_tools@boost@@QEAAXAEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@_N@Z) already defined in libboost_unit_test_framework-vc142-mt-gd-x64-1_81.lib(test_tools.obj)
C:\Dev\Libraries\Hypodermic\Hypodermic.Tests\Hypodermic.Tests.exe : fatal error LNK1169: one or more multiply defined symbols found
  ninja: build stopped: subcommand failed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant