Невозможно скомпилировать LibOTR

Я пытаюсь использовать libotr но у меня возникает следующая проблема при попытке скомпилировать очень простую инициализацию библиотеки.

#include <libotr/proto.h>

int main(int argc, char const *argv[])
{
OTRL_INIT;
// OtrlUserState userstate = otrl_userstate_create();

return 0;
}

Я компилирую его с помощью следующей команды:

g++ main.cpp -o main -L /usr/local/lib/ -lotr

Но по какой-то причине я получаю:

Undefined symbols for architecture x86_64:
"otrl_init(unsigned int, unsigned int, 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 (use -v to see invocation)
make: *** [bin/bin] Error 1

Я явно проверил, и библиотека действительно имеет следующие символы.

0

Решение

После быстрого наблюдения я заметил, что libotr использует C введите имя искажения, и проблема будет решена путем добавления следующих строк в предложение include библиотеки:

extern "C" {
#include <libotr/proto.h>
}

Если у вас есть похожая проблема, просто перечислите символы библиотеки с nm Утилиты и проверьте, начинаются ли имена символов с одного или двух символов подчеркивания: _foo является C стиль, а __foo является C++ стиль.

Постскриптум Я отправил это, так как мне потребовалось некоторое время, чтобы понять это. Я надеюсь, что этот вопрос + ответ сэкономит вам время.

2

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


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