web-dev-qa-db-ja.com

ZlibをCmakeにリンクする方法

私は自分のファイルをzlib librayにリンクしようとしていますが、それでも: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); 
}

何が欠けているのでしょうか?前もって感謝します

5
AKJ

この古い投稿は多くの注目を集めているようです。 zlibをCMakeとリンクするためのソリューションは次のいずれかです。

  1. Linuxの場合、zlibをダウンロードするには

    Sudo apt-get install zlib1g-dev
    

    そして、マシューが提案したことを追った。

  2. または、1のようにzlibをダウンロードして実行します。

    add_executable(my_executable main.cpp)
    target_link_libraries(my_executable z)
    
  3. または、彼らのホームページから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})
    target_link_libraries(my_executable zlib)
    
  4. Cmakeを学ぶだけで、自分で方法を見つけ出すことができます。
1
AKJ