我有一个.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++
文件中调用这些,而zlib
是C
库。我不确定fopen
的错误,虽然。
有没有人看到我如何调用这些函数并绕过编译错误?
我也试过了:
extern "C" {
#include <zlib.h>
}
但仍然没有去。我是找错对象了吗?我应该将这个函数移动到C
文件中吗?但我可能也有同样的问题
在传递std::string
给需要char *
的函数时使用.c_str()
这里有两件事…
- 编译时c++文件中包含的C头文件 链接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>
}