Windows下编译zfp示例simple.c遇未定义引用错误求解决
在Windows上编译zfp项目simple.c的正确方法
错误原因
你碰到的问题分两类:
- 隐式函数声明警告:比如
stream_open、stream_close,是因为编译时没正确关联bitstream模块的头文件,更核心的是没链接zfp的库实现。 - 未定义引用错误:所有
zfp_xxx函数找不到,本质是只编译了simple.c,没把zfp的库文件链接进来,编译器找不到这些函数的二进制实现。
完整操作步骤
1. 先编译zfp核心库
zfp是库项目,不能直接单独编译示例文件,必须先编译库:
- 下载zfp完整源码(不要只提取examples目录)
- 用CMake生成编译工程(以MinGW为例,VS流程类似):
- 打开MinGW终端,进入zfp源码根目录
- 创建并进入编译目录:
mkdir build && cd build - 生成MinGW Makefile:
cmake .. -G "MinGW Makefiles" - 编译库文件:
编译完成后,build目录会生成mingw32-makelibzfp.a(静态库)或libzfp.dll(动态库)
2. 编译simple.c并链接zfp库
假设zfp源码根目录为zfp,simple.c在zfp/examples,库文件在zfp/build,执行以下命令:
gcc -o simple.exe zfp/examples/simple.c -Izfp/src -Lzfp/build -lzfp
参数说明:
-Izfp/src:指定zfp头文件(zfp.h、bitstream.h等)的搜索路径-Lzfp/build:指定zfp库文件的存放路径-lzfp:告诉编译器链接zfp库
3. 处理残留警告
如果还有stream_open类警告,确认simple.c中已包含bitstream.h,若没有手动添加:
#include "bitstream.h"
正常情况下zfp.h会间接引入该头文件,只要头文件路径正确就不会出现问题。
运行程序
编译成功后,直接执行生成的simple.exe即可。
内容的提问来源于stack exchange,提问作者lena
相关产品推荐
相关产品推荐

