// testzlib.cpp 简单测试 zlib 的压缩功能
#include<stdio.h>
#include<zlib.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int err;
Byte compr[200], uncompr[200]; // big enough
uLong comprLen, uncomprLen;
const char* hello = "12345678901234567890123456789012345678901234567890";
uLong len = strlen(hello) + 1;
comprLen = sizeof(compr) / sizeof(compr[0]);
err =compress(compr, &comprLen, (const Bytef*)hello, len);
if (err != Z_OK) {
//cerr << "compess error: " << err << '\n';
printf("error:compress error!\n");
exit(1);
}
//cout << "orignal size: " << len<< " , compressed size : " << comprLen << '\n';
printf("orignal size: %d compressed size: %d \n",len,comprLen);
strcpy((char*)uncompr, "garbage");
err = uncompress(uncompr, &uncomprLen, compr, comprLen);
if (err != Z_OK) {
// cerr << "uncompess error: " << err << '\n';
printf("error:uncompress error!\n");
exit(1);
}
//cout << "orignal size: " << len << " , uncompressed size : " << uncomprLen << '\n';
printf("orignal size:%d uncopressed size :%d \n",len,uncomprLen);
if (strcmp((char*)uncompr, hello)) {
// cerr << "BAD uncompress!!!\n";
printf("error:bad uncompress!");
exit(1);
}
else {
// cout << "uncompress() succeed: \n" << (char *)uncom
printf("uncompress() suceed :%s\n",(char*)uncompr);
}
}
提示错误:
1.c:(.text+0x75): undefined reference to `compress'
1.c:(.text+0xf2): undefined reference to `uncompress'
但是我的/usr/linclude/目录下有zlib库 ,求解啊—。—
5 个解决方案
#1
链接时加 -lz 。
你没有链接 zlib 的库。
你没有链接 zlib 的库。
#2
还真是,太感谢了!
不过求教一下 为什么zlib.h已经在/usr/include/目录下了 还要链接zlib库呢 gcc 默认的链接库 不就是/usr/include/目录吗
#3
C 从源代码到程序要经历两个大的步骤,一个是编译(compile),一个是链接(link)。
.h 在编译的时候使用,告诉编译器 compress 是一个函数。(这个由 #include 指定)
库文件在链接的时候使用,提供了 compress 函数的(已经编译好的)具体实现。(这个需要由命令行指定)
库文件不是 .h ,一般为 .a (Linux, 静态库)或 .so (Linux,动态库)
#4
-lxxxx
指示链接xxxxlib.a
指示链接xxxxlib.a
#5
-lxxxx
指示链接xxxxlib.a
这个就是-lz /usr/include/zlib.h才能成功
#1
链接时加 -lz 。
你没有链接 zlib 的库。
你没有链接 zlib 的库。
#2
链接时加 -lz 。
你没有链接 zlib 的库。
还真是,太感谢了!
不过求教一下 为什么zlib.h已经在/usr/include/目录下了 还要链接zlib库呢 gcc 默认的链接库 不就是/usr/include/目录吗
#3
链接时加 -lz 。
你没有链接 zlib 的库。
还真是,太感谢了!
不过求教一下 为什么zlib.h已经在/usr/include/目录下了 还要链接zlib库呢 gcc 默认的链接库 不就是/usr/include/目录吗
C 从源代码到程序要经历两个大的步骤,一个是编译(compile),一个是链接(link)。
.h 在编译的时候使用,告诉编译器 compress 是一个函数。(这个由 #include 指定)
库文件在链接的时候使用,提供了 compress 函数的(已经编译好的)具体实现。(这个需要由命令行指定)
库文件不是 .h ,一般为 .a (Linux, 静态库)或 .so (Linux,动态库)
#4
-lxxxx
指示链接xxxxlib.a
指示链接xxxxlib.a
#5
-lxxxx
指示链接xxxxlib.a
这个就是-lz /usr/include/zlib.h才能成功