从c++文件调用zlib (C代码)



我有一个.cpp文件,其中包含以下通过zlib解压文件的函数:

#include <zlib.h>
#include <fstream>
bool gzip_uncompress(std::string &compressed_file_path,std::string &uncompressed_file_path)
{
    char outbuffer[1024*16];
    gzFile infile = (gzFile)gzopen(compressed_file_path, "rb");
    FILE *outfile = fopen(uncompressed_file_path, "wb");
    gzrewind(infile);
    while(!gzeof(infile))
    {
        int len = gzread(infile, outbuffer, sizeof(outbuffer));
        fwrite(outbuffer, 1, len, outfile);
    }
    fclose(outfile);
    gzclose(infile);
    return true;
}

这看起来应该运行给我,但我得到编译时错误声明:

No matching function call to 'gzopen'

No matching function call to 'fopen'

我唯一能想到的是我在C++文件中调用这些,而zlibC库。我不确定fopen的错误,虽然。

有没有人看到我如何调用这些函数并绕过编译错误?

我也试过了:

extern "C" {
   #include <zlib.h>
}

但仍然没有去。我是找错对象了吗?我应该将这个函数移动到C文件中吗?但我可能也有同样的问题

在传递std::string给需要char *的函数时使用.c_str()

这里有两件事…

  1. 编译时c++文件中包含的C头文件
  2. 链接C编译库(zlib)与c++程序

对于第一个问题,你的编译器无法看到gzopen的声明,可能有很多原因。

请查看zlib.h中gzopen函数的声明

确保您需要在g++的参数中包含zlib.h的路径示例:-I/usr/local/include/zlib.h

请点击下面的链接查看开发人员文档http://www.zlib.net/manual.html请按照帮助

2。链接你的c++程序到zlib,请使用

extern "C" {
#include <zlib.h> 
}

最新更新