Closed traversaro closed 2 years ago
Until the problem is fixed, a workaround is to pass to the downstream project:
cmake -DZLIB_LIBRARY_RELEASE:PATH=%CONDA_PREFIX%\Library\lib\zlib.lib .
fyi @diegoferigo
I wonder if this is related to https://github.com/conda-forge/zlib-feedstock/pull/51 .
I wonder if this is related to conda-forge/zlib-feedstock#51 .
Indeed, the problem does not occurs if I manually delete the zlib.dll
from %CONDA_PREFIX%
:
-- Found ZLIB: C:/Users/STraversaro/AppData/Local/mambaforge/envs/ign-gazebo/Library/lib/z.lib (found version "1.2.11")
The bug does not occur if a simple project with find_package(ZLIB REQUIRED)
is tested.
I modified the FindZLIB.cmake
(https://github.com/Kitware/CMake/blob/eeb45401163d831b8c841ef6eba81466b4067b68/Modules/FindZLIB.cmake#L86) file of CMake adding a pair of set(CMAKE_FIND_DEBUG_MODE TRUE)
and set(CMAKE_FIND_DEBUG_MODE FALSE)
around the call to debug, and I noticed that if the find_package(ZLIB)
is on its own only .lib files are searched:
find_library considered the following locations:
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/lib/()zd(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/lib/()zlibd(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/lib/()zdlld(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/lib/()zlibd1(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/lib/()zlib1d(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/lib/()zlibstaticd(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/()zd(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/()zlibd(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/()zdlld(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/()zlibd1(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/()zlib1d(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/()zlibstaticd(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/lib/()zd(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/lib/()zlibd(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/lib/()zdlld(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/lib/()zlibd1(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/lib/()zlib1d(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/lib/()zlibstaticd(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/()zd(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/()zlibd(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/()zdlld(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/()zlibd1(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/()zlib1d(\.lib)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/()zlibstaticd(\.lib)
While in the failing case, also .dll library are searched for some reason:
find_library considered the following locations:
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/lib/()z(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/lib/()zlib(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/lib/()zdll(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/lib/()zlib1(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/lib/()zlibstatic(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/()z(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/()zlib(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/()zdll(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/()zlib1(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/atlmfc/lib/x64/()zlibstatic(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/lib/()z(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/lib/()zlib(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/lib/()zdll(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/lib/()zlib1(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/lib/()zlibstatic(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/()z(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/()zlib(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/()zdll(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/()zlib1(\.lib|\.dll)
C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64/()zlibstatic(\.lib|\.dll)
C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/ucrt/x64/lib/()z(\.lib|\.dll)
C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/ucrt/x64/lib/()zlib(\.lib|\.dll)
C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/ucrt/x64/lib/()zdll(\.lib|\.dll)
C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/ucrt/x64/lib/()zlib1(\.lib|\.dll)
C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/ucrt/x64/lib/()zlibstatic(\.lib|\.dll)
C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/ucrt/x64/()z(\.lib|\.dll)
C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/ucrt/x64/()zlib(\.lib|\.dll)
C:/Program Files (x86)/Windows Kits/10/Lib/10.0.19041.0/ucrt/x64/()zdll(\.lib|\.dll)
Furthermore, also the call stack is given in the failing case:
The item was found at
C:/Users/STraversaro/AppData/Local/mambaforge/envs/ign-gazebo/zlib.dll
Call Stack (most recent call first):
C:/Users/STraversaro/AppData/Local/mambaforge/envs/ign-gazebo/Library/CMake/protobuf-config.cmake:6 (find_package)
C:/Users/STraversaro/AppData/Local/mambaforge/envs/ign-gazebo/Library/share/cmake/ignition-cmake2/cmake2/FindIgnProtobuf.cmake:29 (find_package)
C:/Users/STraversaro/AppData/Local/mambaforge/envs/ign-gazebo/Library/lib/cmake/ignition-transport11/ignition-transport11-config.cmake:92 (find_package)
C:/Users/STraversaro/AppData/Local/mambaforge/envs/ign-gazebo/Library/lib/cmake/ignition-gazebo6/ignition-gazebo6-config.cmake:94 (find_package)
CMakeLists.txt:6 (find_package)
So the problem boils down to a strange interaction between CMAKE_FIND_LIBRARY_SUFFIXES
and https://github.com/conda-forge/zlib-feedstock/pull/51 . If find_package(ZLIB)
is used on its own CMAKE_FIND_LIBRARY_SUFFIXES
is .lib
, and everything works fine. If find_package(ZLIB)
is used deep nested in ign-gazebo depencies CMAKE_FIND_LIBRARY_SUFFIXES
is .lib;.dll
, that is fine whenever in the same directory a zlib.lib
and zlib.dll
can be found, because the .lib
is still preferred. But whenever on the search path a directory with just a zlib.dll
is found (as it can happen after https://github.com/conda-forge/zlib-feedstock/pull/51), then it is considered suitable match and it is returned.
A search on GitHub https://github.com/search?q=org%3Aignitionrobotics+CMAKE_FIND_LIBRARY_SUFFIXES found the problematic piece of code: https://github.com/ignitionrobotics/ign-cmake/blob/c34873d6c6bb301d5a865497483f4399d84c28b8/cmake/ignition-config.cmake.in#L139
The tricky thing is that we would need to patch this on ign-cmake, and then regenerate all ignition packages...
Upstream PR https://github.com/ignitionrobotics/ign-cmake/pull/189, conda backport https://github.com/conda-forge/libignition-cmake0-feedstock/pull/20 .
I am building an example project of ignition-gazebo (https://github.com/ignitionrobotics/ign-gazebo/tree/ign-gazebo5/examples/standalone/custom_server, but patching out the Linux if), and compilation fails with:
It seems that
zlib.dll
instead ofzlib.lib
is found at the CMake level:Environment (
conda list
):Details about
conda
and system (conda info
):