J'essaie de lier mon fichier avec le libray zlib mais j'obtiens toujours: référence non définie à `deflateInit_ '.
J'utilise actuellement CLion, j'ai téléchargé le fichier zLib à partir de la page d'accueil et l'ai ajouté au projet. Voici à quoi ressemble mon 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)
Et le code (copie depuis le 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);
}
Que pourrait-il manquer? Merci d'avance
Il semble que ce vieux poste reçoive beaucoup de traction. Les solutions pour lier zlib à CMake sont soit:
Pour télécharger zlib, si sous Linux avec
Sudo apt-get install zlib1g-dev
puis en suivant ce que Matthieu a proposé.
Ou téléchargez zlib comme dans 1 et faites:
add_executable(my_executable main.cpp)
target_link_libraries(my_executable z)
Ou téléchargez simplement zlib depuis leur page d'accueil: https://zlib.net/ , puis enregistrez-le dans un dossier 'deps'. Modifiez la CMakeList dans le dossier zlib avec
set(ZLIB_DEPS_DIR ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE)
et dans la CMakeList principale, faites
add_executable(my_executable main.cpp)
add_subdirectory(deps)
include_directories(my_executable ${ZLIB_DEPS})
target_link_libraries(my_executable zlib)