[package] boost/1.72.0: broken on windows due apparently to implicit link to libboost_unit_test_framework
See original GitHub issuePackage and Environment Details (include every applicable attribute)
- Package Name/Version: boost/1.72.0, also reproduced with boost/1.71.0
- Operating System+version: Windows 10
- Compiler+version: visual studio 2019
- Conan version: conan 1.22.2
- Python version: Python 3.7.4
Conan profile (output of conan profile show default
or conan profile show <profile>
if custom profile is in use)
[settings]
os=Windows
os_build=Windows
arch=x86_64
arch_build=x86_64
compiler=Visual Studio
compiler.version=15
build_type=Release
[options]
[build_requires]
[env]
Steps to reproduce (Include if Applicable)
CMakeLists.txt (just a single executable built from empty source, linking against boost/1.72.0):
include(cmake/conan.cmake)
find_package (Python3 COMPONENTS Interpreter)
get_filename_component(PATH_PYTHON3 ${Python3_EXECUTABLE} DIRECTORY)
find_program(CONAN_CMD conan HINTS ${PATH_PYTHON3} PATH_SUFFIXES Scripts)
conan_cmake_run(REQUIRES
boost/1.72.0
BASIC_SETUP
CMAKE_TARGETS
CONAN_COMMAND ${CONAN_CMD}
OPTIONS
BUILD missing
GENERATORS cmake_find_package)
set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH})
set(CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR} ${CMAKE_PREFIX_PATH})
find_package(Boost REQUIRED)
add_executable(boost_test)
target_sources(boost_test PRIVATE empty_file.cpp)
target_link_libraries(boost_test PRIVATE Boost::Boost
empty_file.cpp
cmake . cmake --build .
Logs (Include/Attach if Applicable)
(omitting compile)
FAILED: bin/boost-test.exe
cmd.exe /C "cd . && "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_exe --intdir=test\CMakeFiles\test.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100183~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100183~1.0\x64\mt.exe --manifests -- C:\PROGRA~2\MICROS~4\2019\COMMUN~1\VC\Tools\MSVC\1425~1.286\bin\Hostx64\x64\link.exe /nologo test\CMakeFiles\boost_test.dir\empty_file.cpp.obj /out:bin\boost_test.exe /implib:lib\boost_test.lib /pdb:bin\boost_test.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console C:\.conan\0e858b\1\lib\libboost_wave.lib C:\.conan\0e858b\1\lib\libboost_container.lib C:\.conan\0e858b\1\lib\libboost_contract.lib C:\.conan\0e858b\1\lib\libboost_exception.lib C:\.conan\0e858b\1\lib\libboost_graph.lib C:\.conan\0e858b\1\lib\libboost_iostreams.lib C:\.conan\0e858b\1\lib\libboost_locale.lib C:\.conan\0e858b\1\lib\libboost_log.lib C:\.conan\0e858b\1\lib\libboost_program_options.lib C:\.conan\0e858b\1\lib\libboost_random.lib C:\.conan\0e858b\1\lib\libboost_regex.lib C:\.conan\0e858b\1\lib\libboost_serialization.lib C:\.conan\0e858b\1\lib\libboost_wserialization.lib C:\.conan\0e858b\1\lib\libboost_coroutine.lib C:\.conan\0e858b\1\lib\libboost_fiber.lib C:\.conan\0e858b\1\lib\libboost_context.lib C:\.conan\0e858b\1\lib\libboost_timer.lib C:\.conan\0e858b\1\lib\libboost_thread.lib C:\.conan\0e858b\1\lib\libboost_chrono.lib C:\.conan\0e858b\1\lib\libboost_date_time.lib C:\.conan\0e858b\1\lib\libboost_atomic.lib C:\.conan\0e858b\1\lib\libboost_filesystem.lib C:\.conan\0e858b\1\lib\libboost_system.lib C:\.conan\0e858b\1\lib\libboost_type_erasure.lib C:\.conan\0e858b\1\lib\libboost_log_setup.lib C:\.conan\0e858b\1\lib\libboost_math_c99.lib C:\.conan\0e858b\1\lib\libboost_math_c99f.lib C:\.conan\0e858b\1\lib\libboost_math_c99l.lib C:\.conan\0e858b\1\lib\libboost_math_tr1.lib C:\.conan\0e858b\1\lib\libboost_math_tr1f.lib C:\.conan\0e858b\1\lib\libboost_math_tr1l.lib C:\.conan\0e858b\1\lib\libboost_stacktrace_noop.lib C:\.conan\0e858b\1\lib\libboost_stacktrace_windbg.lib C:\.conan\0e858b\1\lib\libboost_stacktrace_windbg_cached.lib C:\.conan\0e858b\1\lib\libboost_unit_test_framework.lib bcrypt.lib C:\Users\Tobi\.conan\data\zlib\1.2.11\_\_\package\75ed07303f056424be45ffb582032fe7ad980a95\lib\zlib.lib C:\Users\Tobi\.conan\data\bzip2\1.0.8\_\_\package\8f5b6f2424f382951ec41d70bf48f85f9cf3c5b4\lib\bz2.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
LINK Pass 1: command "C:\PROGRA~2\MICROS~4\2019\COMMUN~1\VC\Tools\MSVC\1425~1.286\bin\Hostx64\x64\link.exe /nologo test\CMakeFiles\boost_test.dir\empty_file.cpp.obj /out:bin\boost_test.exe /implib:lib\boost_test.lib /pdb:bin\boost_Test.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console C:\.conan\0e858b\1\lib\libboost_wave.lib C:\.conan\0e858b\1\lib\libboost_container.lib C:\.conan\0e858b\1\lib\libboost_contract.lib C:\.conan\0e858b\1\lib\libboost_exception.lib C:\.conan\0e858b\1\lib\libboost_graph.lib C:\.conan\0e858b\1\lib\libboost_iostreams.lib C:\.conan\0e858b\1\lib\libboost_locale.lib C:\.conan\0e858b\1\lib\libboost_log.lib C:\.conan\0e858b\1\lib\libboost_program_options.lib C:\.conan\0e858b\1\lib\libboost_random.lib C:\.conan\0e858b\1\lib\libboost_regex.lib C:\.conan\0e858b\1\lib\libboost_serialization.lib C:\.conan\0e858b\1\lib\libboost_wserialization.lib C:\.conan\0e858b\1\lib\libboost_coroutine.lib C:\.conan\0e858b\1\lib\libboost_fiber.lib C:\.conan\0e858b\1\lib\libboost_context.lib C:\.conan\0e858b\1\lib\libboost_timer.lib C:\.conan\0e858b\1\lib\libboost_thread.lib C:\.conan\0e858b\1\lib\libboost_chrono.lib C:\.conan\0e858b\1\lib\libboost_date_time.lib C:\.conan\0e858b\1\lib\libboost_atomic.lib C:\.conan\0e858b\1\lib\libboost_filesystem.lib C:\.conan\0e858b\1\lib\libboost_system.lib C:\.conan\0e858b\1\lib\libboost_type_erasure.lib C:\.conan\0e858b\1\lib\libboost_log_setup.lib C:\.conan\0e858b\1\lib\libboost_math_c99.lib C:\.conan\0e858b\1\lib\libboost_math_c99f.lib C:\.conan\0e858b\1\lib\libboost_math_c99l.lib C:\.conan\0e858b\1\lib\libboost_math_tr1.lib C:\.conan\0e858b\1\lib\libboost_math_tr1f.lib C:\.conan\0e858b\1\lib\libboost_math_tr1l.lib C:\.conan\0e858b\1\lib\libboost_stacktrace_noop.lib C:\.conan\0e858b\1\lib\libboost_stacktrace_windbg.lib C:\.conan\0e858b\1\lib\libboost_stacktrace_windbg_cached.lib C:\.conan\0e858b\1\lib\libboost_unit_test_framework.lib bcrypt.lib C:\Users\Tobi\.conan\data\zlib\1.2.11\_\_\package\75ed07303f056424be45ffb582032fe7ad980a95\lib\zlib.lib C:\Users\Tobi\.conan\data\bzip2\1.0.8\_\_\package\8f5b6f2424f382951ec41d70bf48f85f9cf3c5b4\lib\bz2.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:test\CMakeFiles\boost_test.dir/intermediate.manifest test\CMakeFiles\boost_test.dir/manifest.res" failed (exit code 1120) with the following output:
C:\Users\tobi\test\libboost_unit_test_framework.lib(unit_test_main.obj) : error LNK2019: unresolved external symbol "class boost::unit_test::test_suite * __cdecl init_unit_test_suite(int,char * * const)" (?init_unit_test_suite@@YAPEAVtest_suite@unit_test@boost@@HQEAPEAD@Z) referenced in function main
C:\Users\Tobi\test\CMakefiles\boost_test/boost_test.exe : fatal error LNK1120: 1 unresolved externals
Note the path to the missing C:\Users\tobi\test\libboost_unit_test_framework.lib – that is inside my source tree. I’m fairly sure that what happens is that boost uses one of the magic #pragmas offered by Visual C++ to pull in the unit_test library, but the path is messed up (relative instead of absolute).
Note that I’m using the default “magic_autolink” is therefore false.
Issue Analytics
- State:
- Created 3 years ago
- Comments:20 (7 by maintainers)
Top Results From Across the Web
Version 1.72.0 - Boost C++ Libraries
The filesystem_error exception is now implemented in the compiled library of Boost.Filesystem. Users may need to add linking with Boost.
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
You can workaround the problem in the case if you don’t want to use the boost::unit_test framework (UTF) at all but you want to use a gtest framework with other boost libraries. You can create an other package with a package receipt option “boost:without_test=True”. This will recompile the whole boost on your machine although.
So here is a sample conanfile.txt for the workaround:
If you are using the latest version of Conan make sure to like against the correct target (assuming you are using cmake) for
GTest
to not include the main. I see ninja but I’m not familiar with to suggest something.If you want gtest and not boost test, you may be able to workaround by using the options, but I am not sure (off the top of my head) how.
Most unit test frameworks provide the ability to define your own
main()
which is another alternative.