首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >liblzf压缩错误未定义的符号lzf_compress C++

liblzf压缩错误未定义的符号lzf_compress C++
EN

Stack Overflow用户
提问于 2015-08-14 11:03:15
回答 1查看 352关注 0票数 1

我正在尝试使用LZF C++。然而,当我编译它时,它给出了这个错误:

代码语言:javascript
复制
g++     -o dist/Debug/GNU-MacOSX/cppapplication_2 build/Debug/GNU-MacOSX/lzf_c.o build/Debug/GNU-MacOSX/lzf_d.o build/Debug/GNU-MacOSX/main.o 
Undefined symbols for architecture x86_64:
  "lzf_compress(void const*, unsigned int, void*, unsigned int)", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1

我已经包含了lzf.h。

EN

回答 1

Stack Overflow用户

发布于 2015-08-17 02:45:29

快速浏览一下lzf.h就会发现它没有考虑到C++。通常你会看到类似这样的东西

代码语言:javascript
复制
#ifdef __cplusplus
extern "C" {
#endif

/* Function declarations go here */

#ifdef __cplusplus
}
#endif

这样C++编译器就知道要查找C符号了。我猜您的代码所发生的情况是,C++编译器正在请求它损坏的C++符号lzf_compress,而不仅仅是C符号lzf_compress。但是,由于实际代码在C文件中,您的构建系统可能会使用C编译器(而不是C++编译器)来编译它。

如果我是你,我会修复报头,并提交一个bug (带有补丁),以获得上游的修复。

如果你不想修复lzf.h,我想你可以这样做

代码语言:javascript
复制
extern "C" {
#include "lzf.h"
}

另一种“解决方案”是使用C++编译器编译所有内容。不过,我不确定liblzf是否是有效的C++,因此它可能会工作,也可能不会工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32001642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档