如何链接Zlib和Cmake

7gs2gvoe  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(311)

我尝试将我的文件与zlib库链接,但仍然得到:未定义对“deflateInit_”的引用。
我目前正在使用CLion,已经从主页下载了zLib文件并将其添加到项目中。这是我的CmakeLists.txt的外观

cmake_minimum_required(VERSION 3.10) project(GzipTest)

set(CMAKE_CXX_STANDARD 11)

include_directories(ZLIB zlib-1.2.11)

add_executable(GzipTest main.cpp zlib-1.2.11/zlib.h)

代码(从zpipe. c复制):

include "iostream"

include "zlib.h"

include "iostream"

define CHUNK 1639

FILE *fp;

int def(FILE *source, FILE *dest, int level){
    int ret, flush;
    unsigned have;
    z_stream strm;
    unsigned char in[CHUNK];
    unsigned char out[CHUNK];

    // Allocate Deflate state
    strm.zalloc = Z_NULL;
    strm.zfree = Z_NULL;
    strm.opaque = Z_NULL;

    ret = deflateInit(&strm, level);
    if (ret != Z_OK){
        return ret;
    }

}

int main(){
    fp = fopen("inputFile.txt", "r");
    if (fp == nullptr){
        perror("Could not open data");
        exit(EXIT_FAILURE);
    }
    def(fp, fp, 1); 
}

还缺什么呢?先谢谢了

falq053o

falq053o1#

你必须链接到zlib。
如果您使用:

find_package(ZLIB)

然后,您应该:

target_link_libraries(GzipTest ZLIB::ZLIB)

也不要将头文件添加到源文件中:

add_executable(GzipTest main.cpp)
k2arahey

k2arahey2#

看起来这篇老文章吸引了很多人。链接zlib和CMake的解决方案是:
1.下载zlib(如果在Linux上)

sudo apt-get install zlib1g-dev

然后按照马蒂厄的建议。
1.或者像1中那样下载zlib并执行以下操作:

add_executable(my_executable main.cpp)
 target_link_libraries(my_executable z)

1.或者从他们的主页下载zlib:https://zlib.net/,然后将其保存在“deps”文件夹中。使用以下命令修改zlib文件夹中的CMakeList

set(ZLIB_DEPS_DIR ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE)

并在主CMakeList中,执行

add_executable(my_executable main.cpp)
 add_subdirectory(deps)
 include_directories(my_executable ${ZLIB_DEPS_DIR})
 target_link_libraries(my_executable zlib)

相关问题