2014-12-12 2 views
0

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

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

sqlite3 *db; 
int rc; 

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

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

Invalid arguments '
Candidates are:
int sqlite3_open(const char *, * *) '

DataSettings.cpp
/FCS/src
line 24
Semantic Error

Что я здесь делаю неправильно? Что я пренебрег настройкой?

+1

Пожалуйста, покажите * полный * и * неотредактированный * выход ошибки. –

+0

Вы отметили вопрос C++. Это другой язык от C, в котором реализован sqlite. Я не уверен, будет ли сборка правильно построена компилятором C++, но похоже, что вы, вероятно, имеете разницу в изменении имени (что подразумевало бы «нет»). Возможно, вам удастся решить проблему путем соответствующего размещения одного или нескольких «extern» блоков C »{}' в исходном файле амальгамы и, возможно, также в заголовке. –

+0

@JoachimPileborg Ошибка копируется и вставлена ​​из Eclipse. Только редактирование было удалять имя файла, путь и номер строки. Но я отредактирую, чтобы включить их. –

ответ

2

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

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