сжатие — ошибка сжатия liblzf Неопределенные символы lzf_compress Переполнение стека

Я пытаюсь использовать 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.

1

Решение

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

1

Другие решения


По вопросам рекламы [email protected]