esa / pagmo2

A C++ platform to perform parallel computations of optimisation tasks (global and local) via the asynchronous generalized island model.
https://esa.github.io/pagmo2/
GNU General Public License v3.0
808 stars 160 forks source link

CMake finds boost but throws error while linking on Windows Visual Studio 2017 #488

Closed lavancig closed 2 years ago

lavancig commented 2 years ago

Compilation works ok, but the linker cannot find boost.

Running CMake with boost debug flag:

cmake .. -A x64 -DPAGMO_WITH_EIGEN3=ON -DBoost_DEBUG=ON -- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.19043. -- System name: Windows -- The fork_island UDI will NOT be available. -- The C++ compiler ID is: MSVC -- YACMA autodetected C++ flags: -- YACMA autodetected C++ debug flags: /W4;/WX -- Thread library: -- The 'thread_local' keyword is supported. -- Library installation directory: lib -- The '/permissive-' flag is supported, enabling it. -- TBB found using config mode. -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1673 ] _boost_TEST_VERSIONS = "1.77.0;1.77;1.76.0;1.76;1.75.0;1.75;1.74.0;1.74;1.73.0;1.73;1.72.0;1.72;1.71.0;1.71;1.70.0;1.70;1.69.0;1.69;1.68.0;1.68;1.67.0;1.67;1.66.0;1.66;1.65.1;1.65.0;1.65;1.64.0;1.64;1.63.0;1.63;1.62.0;1.62;1.61.0;1.61;1.60.0;1.60" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1674 ] Boost_USE_MULTITHREADED = "TRUE" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1675 ] Boost_USE_STATIC_LIBS = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1676 ] Boost_USE_STATIC_RUNTIME = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1677 ] Boost_ADDITIONAL_VERSIONS = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1678 ] Boost_NO_SYSTEM_PATHS = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1710 ] BOOST_ROOT = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1711 ] ENV{BOOST_ROOT} = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1712 ] BOOST_INCLUDEDIR = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1713 ] ENV{BOOST_INCLUDEDIR} = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1714 ] BOOST_LIBRARYDIR = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1715 ] ENV{BOOST_LIBRARYDIR} = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1803 ] location of version.hpp: C:/local/boost_1_75_0/boost/version.hpp -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1843 ] Boost_VERSION = "107500" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1844 ] Boost_VERSION_STRING = "1.75.0" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1845 ] Boost_VERSION_MACRO = "107500" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1846 ] Boost_VERSION_MAJOR = "1" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1847 ] Boost_VERSION_MINOR = "75" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1848 ] Boost_VERSION_PATCH = "0" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1849 ] Boost_VERSION_COUNT = "3" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1873 ] Boost_LIB_PREFIX = "" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1874 ] Boost_NAMESPACE = "boost" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:953 ] _boost_COMPILER = "-vc141;-vc140" (guessed) -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1910 ] _boost_MULTITHREADED = "-mt" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1988 ] _boost_ARCHITECTURE_TAG = "-x64" (detected) -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1992 ] _boost_RELEASE_ABI_TAG = "-" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1993 ] _boost_DEBUG_ABI_TAG = "-gd" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:2053 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = "C:/local/boost_1_75_0/lib64-msvc-14.1;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:2054 ] _boost_LIBRARY_SEARCH_DIRS_DEBUG = "C:/local/boost_1_75_0/lib64-msvc-14.1;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH" -- Required Boost libraries: serialization -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1673 ] _boost_TEST_VERSIONS = "1.77.0;1.77;1.76.0;1.76;1.75.0;1.75;1.74.0;1.74;1.73.0;1.73;1.72.0;1.72;1.71.0;1.71;1.70.0;1.70;1.69.0;1.69;1.68.0;1.68;1.67.0;1.67;1.66.0;1.66;1.65.1;1.65.0;1.65;1.64.0;1.64;1.63.0;1.63;1.62.0;1.62;1.61.0;1.61;1.60.0;1.60" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1674 ] Boost_USE_MULTITHREADED = "TRUE" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1675 ] Boost_USE_STATIC_LIBS = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1676 ] Boost_USE_STATIC_RUNTIME = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1677 ] Boost_ADDITIONAL_VERSIONS = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1678 ] Boost_NO_SYSTEM_PATHS = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1710 ] BOOST_ROOT = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1711 ] ENV{BOOST_ROOT} = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1712 ] BOOST_INCLUDEDIR = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1713 ] ENV{BOOST_INCLUDEDIR} = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1714 ] BOOST_LIBRARYDIR = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1715 ] ENV{BOOST_LIBRARYDIR} = -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1803 ] location of version.hpp: C:/local/boost_1_75_0/boost/version.hpp -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1843 ] Boost_VERSION = "107500" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1844 ] Boost_VERSION_STRING = "1.75.0" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1845 ] Boost_VERSION_MACRO = "107500" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1846 ] Boost_VERSION_MAJOR = "1" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1847 ] Boost_VERSION_MINOR = "75" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1848 ] Boost_VERSION_PATCH = "0" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1849 ] Boost_VERSION_COUNT = "3" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1873 ] Boost_LIB_PREFIX = "" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1874 ] Boost_NAMESPACE = "boost" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:953 ] _boost_COMPILER = "-vc141;-vc140" (guessed) -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1910 ] _boost_MULTITHREADED = "-mt" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1988 ] _boost_ARCHITECTURE_TAG = "-x64" (detected) -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1992 ] _boost_RELEASE_ABI_TAG = "-" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:1993 ] _boost_DEBUG_ABI_TAG = "-gd" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:2053 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = "C:/local/boost_1_75_0/lib64-msvc-14.1;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:2054 ] _boost_LIBRARY_SEARCH_DIRS_DEBUG = "C:/local/boost_1_75_0/lib64-msvc-14.1;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:2239 ] Searching for SERIALIZATION_LIBRARY_RELEASE: boost_serialization-vc141-mt-x64-1_75;boost_serialization-vc141-mt-x64;boost_serialization-vc141-mt;boost_serialization-vc140-mt-x64-1_75;boost_serialization-vc140-mt-x64;boost_serialization-vc140-mt;boost_serialization-mt-x64-1_75;boost_serialization-mt-x64;boost_serialization-mt;boost_serialization-mt;boost_serialization -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:807 ] Boost_LIBRARY_DIR_RELEASE = "C:/local/boost_1_75_0/lib64-msvc-14.1" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:809 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = "C:/local/boost_1_75_0/lib64-msvc-14.1;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:2294 ] Searching for SERIALIZATION_LIBRARY_DEBUG: boost_serialization-vc141-mt-gd-x64-1_75;boost_serialization-vc141-mt-gd-x64;boost_serialization-vc141-mt-gd;boost_serialization-vc140-mt-gd-x64-1_75;boost_serialization-vc140-mt-gd-x64;boost_serialization-vc140-mt-gd;boost_serialization-mt-gd-x64-1_75;boost_serialization-mt-gd-x64;boost_serialization-mt-gd;boost_serialization-mt;boost_serialization -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:807 ] Boost_LIBRARY_DIR_DEBUG = "C:/local/boost_1_75_0/lib64-msvc-14.1" -- [ C:/Program Files/CMake/share/cmake-3.21/Modules/FindBoost.cmake:809 ] _boost_LIBRARY_SEARCH_DIRS_DEBUG = "C:/local/boost_1_75_0/lib64-msvc-14.1;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH" -- Detected Boost version: 107500 -- Boost include dirs: C:/local/boost_1_75_0 -- Configuring done -- Generating done -- Build files have been written to: C:/Users/User/Documents/repos/pagmo2/build

When compiling with --verbose flag set, the last step results in:

cmake --build . --verbose Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework Copyright (C) Microsoft Corporation. All rights reserved.

Build started 25/11/2021 17:53:10. Project "C:\Users\User\Documents\repos\pagmo2\build\ALL_BUILD.vcxproj" on node 1 (default targets). Project "C:\Users\User\Documents\repos\pagmo2\build\ALL_BUILD.vcxproj" (1) is building "C:\Users\User\Documents\repos\pagmo2\build\ ZERO_CHECK.vcxproj" (2) on node 1 (default targets). InitializeBuildStatus: Creating "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified. CustomBuild: All outputs are up-to-date. FinalizeBuildStatus: Deleting file "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild". Touching "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate". Done Building Project "C:\Users\User\Documents\repos\pagmo2\build\ZERO_CHECK.vcxproj" (default targets).

Project "C:\Users\User\Documents\repos\pagmo2\build\ALL_BUILD.vcxproj" (1) is building "C:\Users\User\Documents\repos\pagmo2\build\ pagmo.vcxproj" (3) on node 1 (default targets). InitializeBuildStatus: Touching "pagmo.dir\Debug\pagmo.tlog\unsuccessfulbuild". CustomBuild: All outputs are up-to-date. ClCompile: All outputs are up-to-date. Link: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\link.exe /ERRORREPORT:QU EUE /OUT:"C:\Users\User\Documents\repos\pagmo2\build\Debug\pagmo.dll" /INCREMENTAL /NOLOGO "C:\local\boost_1_75_0\lib64-msvc-14.1\boost_serialization-vc141-mt-gd-x64-1_75.lib" "C:\Program Files\TBB\lib\tbb12_debug.lib" kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG /PDB:"C:/Users/User/Documents/repos/pagmo2/build/Debug/pagmo.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:/Users/User/Documents/repos/pagmo2/build/Debug/pagmo.lib" /MACHINE:X64 /machine:x64 /DLL pagmo.dir\Debug \cmaes.obj pagmo.dir\Debug\xnes.obj pagmo.dir\Debug\algorithm.obj pagmo.dir\Debug\population.obj pagmo.dir\Debug\problem.obj pagmo.dir\Debug\bfe.obj pagmo.dir\Debug\island.obj pagmo.dir\Debug\archipelago.obj pagmo.dir\Debug\io.obj pagmo.dir\Debug\rng.obj pagmo.dir\Debug\threading.obj pagmo.dir\Debug\topology.obj pagmo.dir\Debug\r_policy.obj pagmo.dir\Debug\s_policy.obj pagmo.dir\Debug\null_problem.obj pagmo.dir\Debug\cec2006.obj pagmo.dir\Debug\cec2009.obj pagmo.dir\Debug\schwefel.obj pagmo.dir\Debug\rosenbrock.obj pagmo.dir\Debug\hock_schittkowsky_71.obj pagmo.dir\Debug\inventory.obj pagmo.dir\Debug\zdt.obj pagmo.dir\Debug\dtlz.obj pagmo.dir\Debug\unconstrain.obj pagmo.dir\Debug\translate.obj pagmo.dir\Debug\decompose.obj pagmo.dir\Debug\golomb_ruler.obj pagmo.dir\Debug\lennard_jones.obj pagmo.dir\Debug\ackley.obj pagmo.dir\Debug\griewank.obj pagmo.dir\Debug\rastrigin.obj pagmo.dir\Debug\minlp_rastrigin.obj pagmo.dir\Debug\luksan_vlcek1.obj pagmo.dir\Debug\wfg.obj pagmo.dir\Debug\cec2013.obj pagmo.dir\Debug\cec2013_data.obj pagmo.dir\Debug\cec2014.obj pagmo.dir\Debug\cec2014_data.obj pagmo.dir\Debug\null_algorithm.obj pagmo.dir\Debug\de.obj pagmo.dir\Debug\pso.obj pagmo.dir\Debug\not_population_based.obj pagmo.dir\Debug\compass_search.obj pagmo.dir\Debug\mbh.obj pagmo.dir\Debug\cstrs_self_adaptive.obj pagmo.dir\Debug\pso_gen.obj pagmo.dir\Debug\ihs.obj pagmo.dir\Debug\sade.obj pagmo.dir\Debug\bee_colony.obj pagmo.dir\Debug\sea.obj pagmo.dir\Debug\sga.obj pagmo.dir\Debug\simulated_annealing.obj pagmo.dir\Debug\moead.obj pagmo.dir\Debug\nsga2.obj pagmo.dir\Debug\gaco.obj pagmo.dir\Debug\de1220.obj pagmo.dir\Debug\gwo.obj pagmo.dir\Debug\maco.obj pagmo.dir\Debug\nspso.obj pagmo.dir\Debug\thread_island.obj pagmo.dir\Debug\default_bfe.obj pagmo.dir\Debug\member_bfe.obj pagmo.dir\Debug\thread_bfe.obj pagmo.dir\Debug\base_bgl_topology.obj pagmo.dir\Debug\unconnected.obj pagmo.dir\Debug\fully_connected.obj pagmo.dir\Debug\ring.obj pagmo.dir\Debug\free_form.obj pagmo.dir\Debug\fair_replace.obj pagmo.dir\Debug\select_best.obj pagmo.dir\Debug\constrained.obj pagmo.dir\Debug\discrepancy.obj pagmo.dir\Debug\generic.obj pagmo.dir\Debug\genetic_operators.obj pagmo.dir\Debug\multi_objective.obj pagmo.dir\Debug\hypervolume.obj pagmo.dir\Debug\hv_algorithm.obj pagmo.dir\Debug\hv_bf_approx.obj pagmo.dir\Debug\hv_bf_fpras.obj pagmo.dir\Debug\hv_hv2d.obj pagmo.dir\Debug\hv_hv3d.obj pagmo.dir\Debug\hv_hvwfg.obj pagmo.dir\Debug\base_sr_policy.obj pagmo.dir\Debug\bfe_impl.obj pagmo.dir\Debug\task_queue.obj pagmo.dir\Debug\prime_numbers.obj pagmo.dir\Debug\gte_getter.obj pagmo.dir\Debug\type_name.obj LINK : fatal error LNK1104: cannot open file 'libboost_serialization-vc141-mt-gd-x64-1_75.lib' [C:\Users\User\Documents\repos\pagmo2\build\pagmo.vcxproj] Done Building Project "C:\Users\User\Documents\repos\pagmo2\build\pagmo.vcxproj" (default targets) -- FAILED.

Done Building Project "C:\Users\User\Documents\repos\pagmo2\build\ALL_BUILD.vcxproj" (default targets) -- FAILED.

Build FAILED.

"C:\Users\User\Documents\repos\pagmo2\build\ALL_BUILD.vcxproj" (default target) (1) -> "C:\Users\User\Documents\repos\pagmo2\build\pagmo.vcxproj" (default target) (3) -> (Link target) -> LINK : fatal error LNK1104: cannot open file 'libboost_serialization-vc141-mt-gd-x64-1_75.lib' [C:\Users\User\Documents\repos\pagm o2\build\pagmo.vcxproj]

0 Warning(s)
1 Error(s)

Time Elapsed 00:00:00.96

The file it claims to be missing "libboost_serialization-vc141-mt-gd-x64-1_75.lib" exists in the folder that findBoost found, as is the file used by the linker "C:\local\boost_1_75_0\lib64-msvc-14.1\boost_serialization-vc141-mt-gd-x64-1_75.lib" (Notice the different prefix).

lavancig commented 2 years ago

To anyone that might have the same issue, compiling it as a static library works: cmake .. -DPAGMO_WITH_EIGEN3=ON -DPAGMO_BUILD_STATIC_LIBRARY=ON

It seems the issue is related to auto-linking boost libraries, and using the following define fixes the issue: add_definitions( -DBOOST_ALL_NO_LIB )

bluescarni commented 2 years ago

@lavancig did you build Boost as static or dynamic libraries?

lavancig commented 2 years ago

I used the installer for the boost libraries on windows (I did not build from the source). This installer includes both static and dynamic boost libraries.

bluescarni commented 2 years ago

@lavancig our Windows testing pipeline uses conda to manage the dependencies. You can see the installation script here:

https://github.com/esa/pagmo2/blob/master/tools/gha_windows-2016.ps1

With this setup we successfully build against the shared Boost libraries.

I will close this report for now, as it seems like the situation is solved. Please re-open if needed.