Как связать Zlib с Cmake - PullRequest
       37

Как связать Zlib с Cmake

0 голосов
/ 14 ноября 2018

Я пытаюсь связать свой файл с библиотекой 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); 
}

Чего не хватает? Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Кажется, этот старый пост набирает обороты.Решения для связывания zlib с CMake:

  1. Чтобы загрузить zlib, если в Linux установлена ​​

    sudo apt-get install zlib1g-dev

, а затем следуя тому, что Матье проповедовал.2. Или загрузите zlib как в 1 и выполните:

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

3.Или просто загрузите zlib с их домашней страницы: https://zlib.net/, и сохраните его в папке 'deps'.Измените CMakeList в папке zlib с помощью

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})
target_link_libraries(my_executable zlib)

4.Просто изучите cmake, и вы сами сможете найти способ.

0 голосов
/ 14 ноября 2018

Вы должны сделать ссылку на zlib.

Если вы использовали:

find_package(ZLIB)

Тогда вы должны иметь:

target_link_libraries(GzipTest ${ZLIB_LIBRARIES})

Также не добавляйте заголовкик вашим исходным файлам:

add_executable(GzipTest main.cpp)
...