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

Tests are not building on windows with LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc142-mt-x64-1_74.lib' #50

Open
yuriy-mochurad opened this issue Dec 2, 2020 · 1 comment

Comments

@yuriy-mochurad
Copy link

Can not build tests in following setup:

  • Windows 10
  • cmake: 3.17.3
  • Visual Studio 2019
  • boost 1.74.0 (also tried with boost 1.73.0)
  • gtest 1.10.0

Build log looks like:

Build log with not able to find boost library
C:\tmp\ni-media\build>cmake --build . --config Release
Microsoft (R) Build Engine version 16.6.0+5ff7b0c9e for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
  Checking Build System
  Building Custom Rule C:/tmp/ni-media/audiostream/CMakeLists.txt
  iotools.cpp
  stream_info.cpp
  istream.cpp
  ostream.cpp
  ivectorstream.cpp
  ifstream.cpp
  ofstream.cpp
  ifvectorstream.cpp
  fstream_info.cpp
  ifstream_info.cpp
  ofstream_info.cpp
  aiff_ofstream.cpp
  wav_ofstream.cpp
  Generating Code...
  audiostream.vcxproj -> C:\tmp\ni-media\build\audiostream\Release\audiostream.lib
  Building Custom Rule C:/tmp/ni-media/audiostream/test/CMakeLists.txt
  gtest_main.cpp
  test_helper.cpp
  source_test.cpp
  stream_buffer.test.cpp
  istream_read_signed_integer.test.cpp
  istream_read_unsigned_integer.test.cpp
  istream_read_floating_point.test.cpp
  ifstream.test.cpp
  ifstream_robustness.test.cpp
  ifvectorstream.test.cpp
  ivectorstream.test.cpp
  ofstream.test.cpp
  aiff_ifstream_info.test.cpp
  aiff_source.test.cpp
  aiff_sink.test.cpp
  wav_ifstream_info.test.cpp
  wav_source.test.cpp
  wav_ofstream_info.test.cpp
  wav_sink.test.cpp
  Generating Code...
LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc142-mt-x64-1_74.lib' [C:\tmp\ni-media\build\audiostream\test\audiostre
am_test.vcxproj]
  Building Custom Rule C:/tmp/ni-media/audiostream/test/CMakeLists.txt
  generator.cpp
LINK : fatal error LNK1104: cannot open file 'libboost_program_options-vc142-mt-x64-1_74.lib' [C:\tmp\ni-media\build\audiostream\test\gene
rator.vcxproj]
  Building Custom Rule C:/tmp/ni-media/pcm/test/CMakeLists.txt

When I explicitly add that lib to link paths I get:

Build log with extra link path
C:\tmp\ni-media\build>cmake --build . --config Release
Microsoft (R) Build Engine version 16.6.0+5ff7b0c9e for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
  Checking Build System
  Building Custom Rule C:/tmp/ni-media/audiostream/CMakeLists.txt
  iotools.cpp
  stream_info.cpp
  istream.cpp
  ostream.cpp
  ivectorstream.cpp
  ifstream.cpp
  ofstream.cpp
  ifvectorstream.cpp
  fstream_info.cpp
  ifstream_info.cpp
  ofstream_info.cpp
  aiff_ofstream.cpp
  wav_ofstream.cpp
  Generating Code...
  audiostream.vcxproj -> C:\tmp\ni-media\build\audiostream\Release\audiostream.lib
  Building Custom Rule C:/tmp/ni-media/audiostream/test/CMakeLists.txt
  gtest_main.cpp
  test_helper.cpp
  source_test.cpp
  stream_buffer.test.cpp
  istream_read_signed_integer.test.cpp
  istream_read_unsigned_integer.test.cpp
  istream_read_floating_point.test.cpp
  ifstream.test.cpp
  ifstream_robustness.test.cpp
  ifvectorstream.test.cpp
  ivectorstream.test.cpp
  ofstream.test.cpp
  aiff_ifstream_info.test.cpp
  aiff_source.test.cpp
  aiff_sink.test.cpp
  wav_ifstream_info.test.cpp
  wav_source.test.cpp
  wav_ofstream_info.test.cpp
  wav_sink.test.cpp
  Generating Code...
  audiostream_test.vcxproj -> C:\tmp\ni-media\build\audiostream\test\Release\audiostream_test.exe
  Building Custom Rule C:/tmp/ni-media/audiostream/test/CMakeLists.txt
  generator.cpp
libboost_program_options-vc142-mt-x64-1_74.lib(value_semantic.obj) : error LNK2005: "public: __cdecl boost::program_options::error_with_op
tion_name::error_with_option_name(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class st
d::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_trai
ts<char>,class std::allocator<char> > const &,int)" (??0error_with_option_name@program_options@boost@@QEAA@AEBV?$basic_string@DU?$char_tra
its@D@std@@V?$allocator@D@2@@std@@00H@Z) already defined in boost_program_options-vc142-mt-x64-1_74.lib(boost_program_options-vc142-mt-x64
-1_74.dll) [C:\tmp\ni-media\build\audiostream\test\generator.vcxproj]
libboost_program_options-vc142-mt-x64-1_74.lib(value_semantic.obj) : error LNK2005: "public: __cdecl boost::program_options::invalid_optio
n_value::invalid_option_value(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0invali
d_option_value@program_options@boost@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in boost_p
rogram_options-vc142-mt-x64-1_74.lib(boost_program_options-vc142-mt-x64-1_74.dll) [C:\tmp\ni-media\build\audiostream\test\generator.vcxpro
j]
libboost_program_options-vc142-mt-x64-1_74.lib(value_semantic.obj) : error LNK2005: "void __cdecl boost::program_options::validators::chec
k_first_occurrence(class boost::any const &)" (?check_first_occurrence@validators@program_options@boost@@YAXAEBVany@3@@Z) already defined
in boost_program_options-vc142-mt-x64-1_74.lib(boost_program_options-vc142-mt-x64-1_74.dll) [C:\tmp\ni-media\build\audiostream\test\genera
tor.vcxproj]
libboost_program_options-vc142-mt-x64-1_74.lib(value_semantic.obj) : error LNK2005: "protected: class std::basic_string<char,struct std::c
har_traits<char>,class std::allocator<char> > __cdecl boost::program_options::validation_error::get_template(enum boost::program_options::
validation_error::kind_t)" (?get_template@validation_error@program_options@boost@@IEAA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocato
r@D@2@@std@@W4kind_t@123@@Z) already defined in boost_program_options-vc142-mt-x64-1_74.lib(boost_program_options-vc142-mt-x64-1_74.dll) [
C:\tmp\ni-media\build\audiostream\test\generator.vcxproj]
libboost_program_options-vc142-mt-x64-1_74.lib(value_semantic.obj) : error LNK2005: "private: virtual void __cdecl boost::program_options:
:value_semantic_codecvt_helper<char>::parse(class boost::any &,class std::vector<class std::basic_string<char,struct std::char_traits<char
>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char>
> > > const &,bool)const " (?parse@?$value_semantic_codecvt_helper@D@program_options@boost@@EEBAXAEAVany@3@AEBV?$vector@V?$basic_string@DU
?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@_N@Z) alre
ady defined in boost_program_options-vc142-mt-x64-1_74.lib(boost_program_options-vc142-mt-x64-1_74.dll) [C:\tmp\ni-media\build\audiostream
\test\generator.vcxproj]
libboost_program_options-vc142-mt-x64-1_74.lib(value_semantic.obj) : error LNK2005: "protected: virtual void __cdecl boost::program_option
s::error_with_option_name::substitute_placeholders(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
 const &)const " (?substitute_placeholders@error_with_option_name@program_options@boost@@MEBAXAEBV?$basic_string@DU?$char_traits@D@std@@V?
$allocator@D@2@@std@@@Z) already defined in boost_program_options-vc142-mt-x64-1_74.lib(boost_program_options-vc142-mt-x64-1_74.dll) [C:\t
mp\ni-media\build\audiostream\test\generator.vcxproj]
libboost_program_options-vc142-mt-x64-1_74.lib(value_semantic.obj) : error LNK2005: "void __cdecl boost::program_options::validate(class b
oost::any &,class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator
<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const &,class std::basic_string<char,struct s
td::char_traits<char>,class std::allocator<char> > *,int)" (?validate@program_options@boost@@YAXAEAVany@2@AEBV?$vector@V?$basic_string@DU?
$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@PEAV?$basic
_string@DU?$char_traits@D@std@@V?$allocator@D@2@@5@H@Z) already defined in boost_program_options-vc142-mt-x64-1_74.lib(boost_program_optio
ns-vc142-mt-x64-1_74.dll) [C:\tmp\ni-media\build\audiostream\test\generator.vcxproj]
libboost_program_options-vc142-mt-x64-1_74.lib(value_semantic.obj) : error LNK2005: "public: virtual char const * __cdecl boost::program_o
ptions::error_with_option_name::what(void)const " (?what@error_with_option_name@program_options@boost@@UEBAPEBDXZ) already defined in boos
t_program_options-vc142-mt-x64-1_74.lib(boost_program_options-vc142-mt-x64-1_74.dll) [C:\tmp\ni-media\build\audiostream\test\generator.vcx
proj]
libboost_program_options-vc142-mt-x64-1_74.lib(options_description.obj) : error LNK2005: "public: __cdecl boost::program_options::options_
description::options_description(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,unsigned
int,unsigned int)" (??0options_description@program_options@boost@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@II
@Z) already defined in boost_program_options-vc142-mt-x64-1_74.lib(boost_program_options-vc142-mt-x64-1_74.dll) [C:\tmp\ni-media\build\aud
iostream\test\generator.vcxproj]
libboost_program_options-vc142-mt-x64-1_74.lib(options_description.obj) : error LNK2005: "class std::basic_ostream<char,struct std::char_t
raits<char> > & __cdecl boost::program_options::operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class boost::pr
ogram_options::options_description const &)" (??6program_options@boost@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AEAV23@AEBVopti
ons_description@01@@Z) already defined in boost_program_options-vc142-mt-x64-1_74.lib(boost_program_options-vc142-mt-x64-1_74.dll) [C:\tmp
\ni-media\build\audiostream\test\generator.vcxproj]
libboost_program_options-vc142-mt-x64-1_74.lib(options_description.obj) : error LNK2005: "public: class boost::program_options::options_de
scription_easy_init & __cdecl boost::program_options::options_description_easy_init::operator()(char const *,char const *)" (??Roptions_de
scription_easy_init@program_options@boost@@QEAAAEAV012@PEBD0@Z) already defined in boost_program_options-vc142-mt-x64-1_74.lib(boost_progr
am_options-vc142-mt-x64-1_74.dll) [C:\tmp\ni-media\build\audiostream\test\generator.vcxproj]
libboost_program_options-vc142-mt-x64-1_74.lib(options_description.obj) : error LNK2005: "public: class boost::program_options::options_de
scription_easy_init & __cdecl boost::program_options::options_description_easy_init::operator()(char const *,class boost::program_options:
:value_semantic const *,char const *)" (??Roptions_description_easy_init@program_options@boost@@QEAAAEAV012@PEBDPEBVvalue_semantic@12@0@Z)
 already defined in boost_program_options-vc142-mt-x64-1_74.lib(boost_program_options-vc142-mt-x64-1_74.dll) [C:\tmp\ni-media\build\audios
tream\test\generator.vcxproj]
libboost_program_options-vc142-mt-x64-1_74.lib(options_description.obj) : error LNK2005: "public: class boost::program_options::options_de
scription_easy_init __cdecl boost::program_options::options_description::add_options(void)" (?add_options@options_description@program_opti
ons@boost@@QEAA?AVoptions_description_easy_init@23@XZ) already defined in boost_program_options-vc142-mt-x64-1_74.lib(boost_program_option
s-vc142-mt-x64-1_74.dll) [C:\tmp\ni-media\build\audiostream\test\generator.vcxproj]
libboost_program_options-vc142-mt-x64-1_74.lib(convert.obj) : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,c
lass std::allocator<char> > __cdecl boost::program_options::to_internal(class std::basic_string<char,struct std::char_traits<char>,class s
td::allocator<char> > const &)" (?to_internal@program_options@boost@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEB
V34@@Z) already defined in boost_program_options-vc142-mt-x64-1_74.lib(boost_program_options-vc142-mt-x64-1_74.dll) [C:\tmp\ni-media\build
\audiostream\test\generator.vcxproj]
C:\tmp\ni-media\build\audiostream\test\Release\generator.exe : fatal error LNK1169: one or more multiply defined symbols found [C:\tmp\ni-
media\build\audiostream\test\generator.vcxproj]
  Building Custom Rule C:/tmp/ni-media/pcm/test/CMakeLists.txt

Am I doing something wrong here?

P.S.: I also tried to add all dependencies through conan, that ensures that all libraries are being linked but got same result.

@marcrambo
Copy link
Collaborator

Sorry for the late reply. Are you still facing this issue?

We have a CI pipeline setup for MSVC2019. I just checked the logs and found the last successful build was using boost 1.73. https://dev.azure.com/mohinda/ni-media/_build/results?buildId=43&view=logs&j=1b5c89fe-70ad-5a27-3200-cdc893585c2c&t=41ca7c80-71a7-5b26-c919-de1799c177ab. The code hasn't changed since then so I would expect this combination to still work.

I just built HEAD locally using VCPKG on Windows with CMake 3.17.0, MSVC2019, boost 1.75.0 and I didn't face any build errors. Could you try using VCPKG? Building boost manually can be error prone, maybe the b2 configuration didn't match the projects compiler settings (MD/MT ... )?

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

2 participants