【发布时间】:2020-09-21 09:29:26
【问题描述】:
我正在尝试使用 CMAKE 构建 libpng,但它需要 zlib,因此我尝试同时构建它们但没有任何运气。我喜欢 FetchContent,因此我可以指定一个 GIT_TAG 并在将来需要时轻松更新它。现在我只有一个空白的 test.c 文件来说明问题。
我收到以下链接错误:
LNK1120 1 unresolved externals
MinimalApp\out\build\x64-Debug\_deps\libpng-build\png-fix-itxt.exe
LNK2019 unresolved external symbol crc32 referenced in function main
当我使用这个 CMakeLists.txt 构建时
cmake_minimum_required (VERSION 3.14)
include(FetchContent)
project(MinimalApp)
FetchContent_Declare(
zlib
GIT_REPOSITORY https://github.com/madler/zlib.git
GIT_TAG v1.2.11
)
FetchContent_MakeAvailable(zlib)
set(ZLIB_INCLUDE_DIR ${zlib_SOURCE_DIR} ${zlib_BINARY_DIR})
set(PNG_BUILD_ZLIB ON CACHE BOOL "Custom zlib Location, else find_package is used")
FetchContent_Declare(
libpng
GIT_REPOSITORY https://github.com/glennrp/libpng.git
GIT_TAG v1.6.37
)
FetchContent_MakeAvailable(libpng)
include_directories(
${libpng_SOURCE_DIR}
${libpng_BINARY_DIR}
)
add_library(MinimalApp SHARED
"test.c"
)
set_target_properties(MinimalApp PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/../bin/${CMAKE_BUILD_TYPE}/x64
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/../bin/${CMAKE_BUILD_TYPE}/x64
)
我的 test.c 文件是空白的。
【问题讨论】:
-
您似乎仍在单独构建它们,因此libpng 仍然不了解zlib。像这样构建 libpng 意味着您已经安装了 zlib 并且可以在您机器上的某个地方访问。
-
好吧,我正在尝试先构建 zlib,然后告诉 libpng zlib 的构建位置,这样我就可以第二个构建 libpng。从 libpng 的 CMakeLists.txt 中,我认为可以这样做:` # 允许用户指定 Zlib 的位置。 # 如果 zlib 作为子项目与此一起构建,则很有用。 option(PNG_BUILD_ZLIB "自定义 zlib 位置,否则使用 find_package" OFF) if(NOT PNG_BUILD_ZLIB) find_package(ZLIB REQUIRED) include_directories(${ZLIB_INCLUDE_DIR}) endif() `