символы не найдены в функциях zlib - PullRequest
0 голосов
/ 24 октября 2019

Начиная с заголовка, при компиляции

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <math.h>
#include <pthread.h>
#include <assert.h>
#include <zlib.h>

int main(){

    char *infilename = "triples.txt.gz";
    char *outfilename = "out_test.txt";
    gzFile infile = gzopen(infilename, "rb");
    FILE *outfile = fopen(outfilename, "wb");
    if (!infile || !outfile) return -1;

    char buffer[128];
    int num_read = 0;
    num_read = gzread(infile, buffer, sizeof(buffer)); 
    while (num_read > 0) {
        fwrite(buffer, 1, num_read, outfile);
    }

    gzclose(infile);
    fclose(outfile);
    return 0;
}

я получаю сообщение

Undefined symbols for architecture x86_64:
  "_gzclose", referenced from:
      _main in ccfPmLqz.o
  "_gzopen", referenced from:
      _main in ccfPmLqz.o
  "_gzread", referenced from:
      _main in ccfPmLqz.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

У меня возникают некоторые проблемы с выяснением того, что он говорит. zlib, кажется, установлен, так как при адаптации кода у меня были некоторые ошибки, связанные с конкретными функциями zlib (например, недостаточно аргументов для gzopen).

1 Ответ

2 голосов
/ 24 октября 2019

Вы не связывали zlib при компиляции. Предполагая, что zlib находится в стандартном пути, вам нужно скомпилировать как

gcc -lz -o c_test sometest.c
...