Я пытаюсь использовать 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.
Быстрый взгляд на 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 ++, так что может работать или не работать.