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

时间:2014-07-11 03:13:24

标签: c++ 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文件中吗?但是我可能会遇到同样的问题。

2 个答案:

答案 0 :(得分:2)

在将.c_str()传递给期望std::string的函数时使用char *

答案 1 :(得分:-2)

这里有两件事......

  1. 在C ++文件中编译C头的时间包含
  2. 将C编译的lib(zlib)与C ++程序链接
  3. 对于第一个问题,你的编译器无法看到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> 
    }