Visual Studio 2013链接Zbar库时出现LNK2001未解析外部符号错误求助
解决Visual Studio 2013中ZBar库的LNK2001未解析外部符号错误
这个LNK2001错误我太熟了——本质就是链接器找不到zbar_image_scanner_destroy这个函数的实现文件,大概率是你的项目配置里ZBar库的引用没做对,或者细节没匹配上。给你一步步捋排查和解决的办法:
1. 先确认链接器输入里加了ZBar的库文件
打开你的VS2013项目属性:
- 右键项目 → 属性 → 配置属性 → 链接器 → 输入 → 附加依赖项
- 这里必须加上ZBar对应的.lib文件:如果是动态库版本,填
zbar.lib;如果是静态库版本,一般是zbarstatic.lib(具体看你下载的ZBar包里面lib文件夹的文件名)
2. 检查项目平台和ZBar库的平台是否匹配
ZBar库分x86和x64版本,你的项目平台必须和库完全一致:
- 看VS顶部的解决方案平台,是Win32(x86)还是x64
- 比如你下的是x86的ZBar,项目就不能设成x64,反之亦然。平台不匹配的话,链接器根本找不到对应架构的符号,必报错。
3. 确认包含目录和库目录配置正确
这一步很容易漏:
- 右键项目 → 属性 → 配置属性 → VC++目录 → 包含目录:要添加ZBar的include文件夹路径(就是有
zbar.h的那个文件夹) - 库目录:要添加ZBar的lib文件夹路径(存放刚才说的.lib文件的文件夹)
4. 动态库版本的额外注意点
如果你用的是ZBar动态库(DLL版),除了上面的配置,还要把zbar.dll文件放到项目的输出目录里(比如Debug或Release文件夹),或者放到系统环境变量的路径里——不过当前是链接错误,先把前面的配置搞定再说。
5. 静态库版本要匹配运行时库
如果你用的是ZBar静态库,得确保项目的运行时库和ZBar编译时用的一致:
- 右键项目 → 属性 → 配置属性 → C/C++ → 代码生成 → 运行时库
- 比如ZBar静态库是用MT(多线程静态)编译的,你的项目也要设成MT(Release版)或MTd(Debug版),不然会出现链接冲突或者符号找不到的问题。
我之前帮朋友排查过几乎一模一样的问题,他就是一开始漏加了lib文件,还有一次是平台选成x64但库是x86的,改完就正常生成了。你按上面的顺序排查,应该能解决。
内容的提问来源于stack exchange,提问作者Fidor
相关产品推荐
相关产品推荐

