今天在编译的时候,用到了bzip2,但是在头文件及库文件都完好且路径设置正确的情况下仍然出现链接错误
ColinT1.c:(.text+0x76): undefined reference to `BZ2_bzDecompressInit'
ColinT1.c:(.text+0x94): undefined reference to `BZ2_bzlibVersion'
collect2: ld returned 1 exit status
我做了一个小的测试文件,如下
//test.c
#include <bzlib.h>
#include <stdio.h>
int main(int argc, char **argv)
{
int isize = 10;
unsigned* pkt_data = NULL;
int pkt_size = 0;
int result = 0;
bz_stream bzstream = {0};
if (BZ2_bzDecompressInit(&bzstream, 0, 0) != BZ_OK)
return -1;
printf("well done/n");
const char * ver = BZ2_bzlibVersion();
printf("version = %s/n", ver);
return 0;
}
输入gcc -o test test.c -lbz2再次编译,仍然链接错误。服了,头文件,库文件完全OK,就是出链接错误,搞得人郁闷的不行。
从网上下载了一个比较新的版本,重新编译OK。
原来问题是我用的bzip2库文件是老版本的GCC编译出来的,而我使用了4.2.1,由于GCC版本不兼容引起的这个问题,以后类似问题引以为戒。
另外还有一个非常重要的小细节:
库文件如果没有(注意:是没有)放在下面几个目录
D:/msys/1.0/local/lib;
D:/MinGW/lib;
D:/MinGW/lib/gcc/mingw32/4.2.1-sjlj;
我最开始是把ligbz2.a放在了D:/msys/1.0/lib目录下,
编译仍然会报上面的链接错误,或者即使不报,程序在运行时也会coredump. 具体原因我也不清楚。
很是奇怪,哪位大侠要清楚原因,请赐教。