Это довольно прямо. Введите следующую команду
ssh-keygen -t rsa -b 4096 -C "youremailid@yourdomain.com"
Сгенерируйте ключ SSH. Откройте файл и скопируйте содержимое. Перейдите на страницу настроек GitHub и нажмите на ключ SSH. Нажмите Добавить новый ключ SSH и вставьте содержимое здесь. Вот и все :) Вы не должны видеть проблему снова.
Похоже, в вашей библиотеке есть API, который предполагает, что она будет вызываться из C, а не из C ++. Это важно, поскольку C ++ фактически требует, чтобы символы, экспортируемые из библиотеки, содержали больше информации, чем просто имя функции. Это обрабатывается путем "изменения имени" функций.
Я предполагаю, что в вашей библиотеке есть включаемый файл, который объявляет ее открытый интерфейс. Чтобы сделать его совместимым как с C, так и с C ++, вы должны сообщить компилятору C ++, что функции, которые он объявляет, должны предполагать использование связывания и именования C.
Вероятно, простой ответ для проверки - это сделать следующее:
extern "C" {
#include "customlibrary.h"
}
в вашем main.cpp вместо того, чтобы напрямую включать customlibrary.h
.
Чтобы заголовок работал на обоих языках и правильно объявлял его функции как C-подобные для C ++, поместите следующее в верхней части файла заголовка:
#ifdef __cplusplus
extern "C" {
#endif
и следующее в нижней части:
#ifdef __cplusplus
}
#endif
Компилятор C ++ выполняет так называемое изменение имен - имена, которые появляются в вашем коде, не совпадают с теми, которые видит ваш компоновщик. Обычный способ обойти это - сказать компилятору, что определенные функции нуждаются в компоновке C:
// myfile.cpp
extern "C" int libfun(); // C function in your library
или сделать это для всего файла заголовка:
// myfile.cpp
extern "C" {
#include "mylibdefs.h" // defs for your C library functions
}
Имеется ли в вашем заголовочном файле обычный
#ifdef __cplusplus
extern "C" {
#endif
// ...
#ifdef __cplusplus
} /* extern "C" */
#endif
, чтобы явно указать связывание библиотечных функций C.
.cpp файлы компилируются со связью C ++, т.е. с изменением имен по умолчанию.