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++ コンパイラがlzf_compressC シンボルだけでなく、C++ シンボルをマングルするものを要求していることだと思いlzf_compressます。ただし、実際のコードは C ファイルにあるため、ビルド システムはおそらく (C++ コンパイラではなく) C コンパイラを使用してコンパイルします。

もし私があなたなら、ヘッダーを修正し、バグを報告して (パッチを付けて) アップストリームで修正を入手します。

修正したくない場合は、次のようなことができるlzf.h思います

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

もう 1 つの「解決策」は、すべてを C++ コンパイラでコンパイルすることです。ただし、liblzf が有効な C++ であるとは確信していないため、機能する場合と機能しない場合があります。

于 2015-08-16T18:45:29.003 に答える