libzf压缩错误未定义符号lzf_compress c++

liblzf compress error Undefined symbols lzf_compress C++

本文关键字:compress c++ lzf 符号 压缩 错误 未定义 libzf      更新时间:2023-10-16

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

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

快速查看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 I 认为你可以做一些像

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

另一个"解决方案"是用c++编译器编译所有内容。不过,我不确定libzf在c++中是否有效,所以这可能有效,也可能无效。