使用libzip的C程序GCC基础链接问题求助
解决libzip编译时的未定义引用问题
问题根源
你遇到的链接错误是因为GCC的库链接顺序错误:链接器会按命令行顺序处理输入,当你把-lzip放在源文件sample.c前面时,链接器先处理libzip库,此时还没有看到sample.c里的zip_open、zip_close引用,不会保留库中的对应符号;等处理sample.c时,需要的符号已经找不到了。
正确编译命令
只需把库参数-lzip放到源文件之后即可:
gcc sample.c -I/usr/include -L/usr/lib/x86_64-linux-gnu -lzip
因为Ubuntu已经将libzip的头文件和库路径加入了GCC的默认搜索路径,所以可以简化为:
gcc sample.c -lzip
如果需要指定输出可执行文件的名称,添加-o参数:
gcc sample.c -lzip -o zip_test
额外代码修正
你的测试代码里有个小问题:错误提示中使用了argv[1],但实际定义的文件名是file_name,如果运行时没有传入参数,argv[1]会是NULL,可能导致异常。建议修改为:
printf("Cannot open ZIP %s archive: %d\n", file_name, err);
内容的提问来源于stack exchange,提问作者erixoltan
相关产品推荐
相关产品推荐

