1

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

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。

4

1 回答 1

3

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

#ifdef __cplusplus
extern "C" {
#endif

/* Function declarations go here */

#ifdef __cplusplus
}
#endif

这样 C++ 编译器就知道要查找 C 符号。我猜你的代码发生了什么是 C++ 编译器正在请求它破坏 C++ 符号的任何东西lzf_compress,而不仅仅是 C 符号lzf_compress。但是,由于实际代码在 C 文件中,因此您的构建系统可能使用 C 编译器(而不是 C++ 编译器)来编译它。

如果我是你,我会修复标题,并提交一个错误(带有补丁)以在上游获得修复。

如果您不想修复lzf.h,我认为您可以做类似的事情

extern "C" {
#include "lzf.h"
}

另一个“解决方案”是使用 C++ 编译器编译所有内容。不过,我不确定 liblzf 是否是有效的 C++,所以它可能有效,也可能无效。

于 2015-08-16T18:45:29.003 回答