Как собрать CMake`ом связку zlib + libpng и получить libpng в виде DLL

Я собираю CMake`ом связку zlib + libpng, на выходе получаю:

  1. статическую и динамическую zlib;
  2. статическую libpng;

Сборка libpng DLL крашится с выводом компоновщика:

png.obj : error LNK2019: unresolved external symbol inflateReset referenced in function png_reset_zstream [D:\Projects
temp\build\libpng\png.vcxproj] pngrutil.obj : error LNK2001: unresolved external symbol inflateReset [D:\Projects\temp\build\libpng\png.vcxproj] png.obj : error LNK2019: unresolved external symbol adler32 referenced in function png_compare_ICC_profile_with_sRGB [D :\Projects\temp\build\libpng\png.vcxproj] png.obj : error LNK2019: unresolved external symbol crc32 referenced in function png_calculate_crc [D:\Projects\temp\bu ild\libpng\png.vcxproj] pngread.obj : error LNK2019: unresolved external symbol inflateEnd referenced in function png_destroy_read_struct [D:\P rojects\temp\build\libpng\png.vcxproj] pngrutil.obj : error LNK2019: unresolved external symbol inflate referenced in function png_inflate [D:\Projects\temp\b uild\libpng\png.vcxproj] pngrutil.obj : error LNK2019: unresolved external symbol inflateReset2 referenced in function png_inflate_claim [D:\Pro jects\temp\build\libpng\png.vcxproj] pngrutil.obj : error LNK2019: unresolved external symbol inflateInit2_ referenced in function png_inflate_claim [D:\Pro jects\temp\build\libpng\png.vcxproj] pngrutil.obj : error LNK2019: unresolved external symbol inflateValidate referenced in function png_inflate_claim [D:\P rojects\temp\build\libpng\png.vcxproj] pngwrite.obj : error LNK2019: unresolved external symbol deflateEnd referenced in function png_destroy_write_struct [D: \Projects\temp\build\libpng\png.vcxproj] pngwutil.obj : error LNK2001: unresolved external symbol deflateEnd [D:\Projects\temp\build\libpng\png.vcxproj] pngwutil.obj : error LNK2019: unresolved external symbol deflate referenced in function png_compress_IDAT [D:\Projects\ temp\build\libpng\png.vcxproj] pngwutil.obj : error LNK2019: unresolved external symbol deflateReset referenced in function png_deflate_claim [D:\Proj ects\temp\build\libpng\png.vcxproj] pngwutil.obj : error LNK2019: unresolved external symbol deflateInit2_ referenced in function png_deflate_claim [D:\Pro jects\temp\build\libpng\png.vcxproj] D:\Projects\temp\build\libpng\Release\libpng16.dll : fatal error LNK1120: 12 unresolved externals [D:\Projects\temp\bui ld\libpng\png.vcxproj] png-fix-itxt.obj : error LNK2019: unresolved external symbol crc32 referenced in function main [D:\Projects\temp\build\ libpng\png-fix-itxt.vcxproj] D:\Projects\temp\build\libpng\Release\png-fix-itxt.exe : fatal error LNK1120: 1 unresolved externals [D:\Projects\temp
build\libpng\png-fix-itxt.vcxproj]

Вот минимальный CMakeLists.txt:

cmake_minimum_required(VERSION 3.16 FATAL_ERROR)

set(PROJECT_NAME test)
project(${PROJECT_NAME} VERSION 1.0.0 LANGUAGES CXX)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/zlib   ${CMAKE_CURRENT_BINARY_DIR}/zlib)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/libpng ${CMAKE_CURRENT_BINARY_DIR}/libpng)

set(PNG_BUILD_ZLIB ON CACHE BOOL "" FORCE)
set(PNG_STATIC ON CACHE BOOL "" FORCE)
set(PNG_SHARED ON CACHE BOOL "" FORCE)
set(PNG_TESTS OFF CACHE BOOL "" FORCE)
set(ZLIB_INCLUDE_DIR ${zlib_SOURCE_DIR} ${zlib_BINARY_DIR})

add_subdirectory(zlib)
add_subdirectory(libpng)

Подскажите, пожалуйста, что я делаю не так? Статическая версия( файлы .lib ) же успешно собирается


Ответы (1 шт):

Автор решения: Eugene

Что ж, ответов не дождался, накостылил сам. Однако, работает безупречно, собираются как статик, так и динамик либы, в Windows и Linux

# ZLIB
set(ZLIB_ROOT $ENV{MSExternal}/multiplatform/zlib)
set(ZLIB_LIBRARY zlib)
add_subdirectory($ENV{MSExternal}/multiplatform/zlib ${CMAKE_CURRENT_BINARY_DIR}/zlib)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/zlib)

if(UNIX)
  set(ZLIB_INCLUDE_DIR ${zlib_SOURCE_DIR} ${zlib_BINARY_DIR}) # zlib
  
  target_include_directories(${LIBRARY_NAME} PRIVATE          # libpng
    ${CMAKE_CURRENT_BINARY_DIR}/libpng
  )
endif()

# LIBPNG
set(PNG_BUILD_ZLIB OFF CACHE BOOL "" FORCE)
set(PNG_SHARED ON CACHE BOOL "" FORCE)
set(PNG_STATIC ON CACHE BOOL "" FORCE)
set(PNG_TESTS OFF CACHE BOOL "" FORCE)
add_subdirectory($ENV{MSExternal}/multiplatform/libpng ${CMAKE_CURRENT_BINARY_DIR}/libpng)

install(TARGETS zlib EXPORT libpng)
→ Ссылка