From 6719fda12b645822321e8e8420748641f2af0f7f Mon Sep 17 00:00:00 2001 From: Lucian Petrut Date: Fri, 7 May 2021 09:23:30 +0000 Subject: [PATCH] win*.sh,cmake: Fix Windows linking errors The Windows build is hitting linking errors after bumping the Boost version to 1.75. The issue is that Boost is now setting the zlib dependecy using INTERFACE_LINK_LIBRARIES, which means that it's no longer located using the standard "find_package" mechanism. In order for the linker to locate zlib, we'll add it to the linker search path. [1] https://github.com/boostorg/boost_install/issues/47 Signed-off-by: Lucian Petrut (cherry picked from commit 0af38d179e48a48354a863e2b7f6478ecd5db318) --- CMakeLists.txt | 1 + win32_build.sh | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a24d38e971d5..83ad90157c07d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,7 @@ if(MINGW) set(CMAKE_CXX_LINK_EXECUTABLE " -o ${CMAKE_GNULD_IMAGE_VERSION} ") + link_directories(${MINGW_LINK_DIRECTORIES}) endif() option(WITH_CCACHE "Build with ccache.") diff --git a/win32_build.sh b/win32_build.sh index 9e88df93f815e..d8b5f76f9818d 100755 --- a/win32_build.sh +++ b/win32_build.sh @@ -96,6 +96,12 @@ dokanLibDir="${depsToolsetDir}/dokany/lib" depsDirs="$lz4Dir;$curlDir;$sslDir;$boostDir;$zlibDir;$backtraceDir;$snappyDir" depsDirs+=";$winLibDir" +# Cmake recommends using CMAKE_PREFIX_PATH instead of link_directories. +# Still, some library dependencies may not include the full path (e.g. Boost +# sets the "-lz" flag through INTERFACE_LINK_LIBRARIES), which is why +# we have to ensure that the linker will be able to locate them. +linkDirs="$zlibDir/lib" + lz4Lib="${lz4Dir}/lib/dll/liblz4-1.dll" lz4Include="${lz4Dir}/lib" curlLib="${curlDir}/lib/libcurl.dll.a" @@ -149,6 +155,7 @@ fi # symbols. Until we fix the dependencies (which are either unspecified # or circular), we'll have to stick to static linking. cmake -D CMAKE_PREFIX_PATH=$depsDirs \ + -D MINGW_LINK_DIRECTORIES="$linkDirs" \ -D CMAKE_TOOLCHAIN_FILE="$MINGW_CMAKE_FILE" \ -D WITH_LIBCEPHSQLITE=OFF \ -D WITH_RDMA=OFF -D WITH_OPENLDAP=OFF \