Все вызовы функций SQLite имеют недопустимые аргументы

Я пытаюсь добавить SQLite Amalgamation в мой проект. В соответствии с их страница, Я «Просто скопируйте объединение в ваш исходный каталог и скомпилируйте его вместе с другими файлами кода C в вашем проекте». Я также скопировал в sqlite3.h, поэтому у меня есть доступ к API.

Однако любой вызов функции API, например:

sqlite3 *db;
int rc;

rc = sqlite3_open("test.db", &db);

приводит к следующей ошибке:

Неверные аргументы
Кандидатами являются:
int sqlite3_open (const char *, * *) ‘

DataSettings.cpp
/ FCS / SRC
строка 24
Семантическая ошибка

Что я здесь не так делаю? Что я забыл настроить?

0

Решение

Проблема имеет признаки несоответствия искажения имени. Поскольку C ++ допускает перегрузку функций на основе их типов аргументов, компиляторы C ++ должны «манипулировать» именами функций, которые они генерируют, в объектный код для кодирования типов аргументов. Компиляторы C не делают этого и не ожидают, что это будет сделано с ними. Указание компилятору C ++, что функция имеет связь «C», отключает искажение имени и перегрузку имени этой функции; Это то, что extern "C" делает.

Хотя C во многих отношениях похож на подмножество C ++, оба являются разными языками. Лучше всего компилировать C-код с помощью C-компилятора. Поэтому одна из ваших альтернатив состоит в том, чтобы встроить источник C объединения sqlite отдельно от вашего кода C ++, например, в библиотеку, и связать его с вашими объектными файлами C ++, чтобы получить конечный исполняемый файл.

2

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


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