Как собрать CMake`ом связку zlib + libpng и получить libpng в виде DLL
Я собираю CMake`ом связку zlib + libpng, на выходе получаю:
- статическую и динамическую zlib;
- статическую 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 шт):
Что ж, ответов не дождался, накостылил сам. Однако, работает безупречно, собираются как статик, так и динамик либы, в 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)