Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows 10 x64中使用CMAKE、FetchContent和Visual Studio 2019构建libpng和zlib时出现链接错误_Cmake_Libpng - Fatal编程技术网

在Windows 10 x64中使用CMAKE、FetchContent和Visual Studio 2019构建libpng和zlib时出现链接错误

在Windows 10 x64中使用CMAKE、FetchContent和Visual Studio 2019构建libpng和zlib时出现链接错误,cmake,libpng,Cmake,Libpng,我试图用CMAKE构建libpng,但它需要zlib,所以我试图同时构建它们,但没有任何运气。我喜欢FetchContent,因此我可以指定一个GIT_标记,并在将来需要时轻松更新它。现在我只有一个空白的test.c文件来说明这个问题 我得到以下链接错误: LNK1120 1 unresolved externals MinimalApp\out\build\x64-Debug\_deps\libpng-build\png-fix-itxt.exe LNK2019 unresolved ex

我试图用CMAKE构建libpng,但它需要zlib,所以我试图同时构建它们,但没有任何运气。我喜欢FetchContent,因此我可以指定一个GIT_标记,并在将来需要时轻松更新它。现在我只有一个空白的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文件是空的。

我最近遇到了这个问题,我相信您还需要设置
ZLIB\u库
cmake变量。如果使用的是
PNG\u BUILD\u ZLIB
,libpng希望设置此变量

这可以简单到:

set(ZLIB_LIBRARY zlib)

我最近遇到了这个问题,我相信您还需要设置
ZLIB_库
cmake变量。如果使用的是
PNG\u BUILD\u ZLIB
,libpng希望设置此变量

这可以简单到:

set(ZLIB_LIBRARY zlib)

看起来您仍然在单独构建它们,所以libpng仍然不了解zlib。像这样构建libpng意味着你已经在你的机器上的某个地方安装了zlib,并且可以访问它。我正在尝试先构建zlib,然后告诉libpng zlib是在哪里构建的,这样我就可以第二次构建libpng了。在libpng的CMakeLists.txt中,我认为可以这样做:“允许用户指定Zlib的位置。”如果zlib作为子项目与此同时构建,则非常有用。选项(PNG_BUILD_ZLIB“自定义ZLIB位置,否则使用“关闭”find_package)if(不是PNG_BUILD_ZLIB)find_package(需要ZLIB)include_目录(${ZLIB_include_DIR})endif()`看起来您仍然在单独构建它们,所以libpng仍然不知道ZLIB。像这样构建libpng意味着你已经在你的机器上的某个地方安装了zlib,并且可以访问它。我正在尝试先构建zlib,然后告诉libpng zlib是在哪里构建的,这样我就可以第二次构建libpng了。在libpng的CMakeLists.txt中,我认为可以这样做:“允许用户指定Zlib的位置。”如果zlib作为子项目与此同时构建,则非常有用。选项(PNG_BUILD_ZLIB“自定义ZLIB位置,否则使用“关闭”查找_包)如果(非PNG_BUILD_ZLIB)查找_包(需要ZLIB)包含_目录(${ZLIB_include_DIR})endif()`