Соберите код с помощью cl и подключитесь к библиотеке sqlite.

У меня есть пример кода с сайта sqlite.

#include <stdio.h>
#include <sqlite3.h> 

int main(int argc, char* argv[]) {
   sqlite3 *db;
   char *zErrMsg = 0;
   int rc;

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

   if( rc ) {
      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
      return(0);
   } else {
      fprintf(stderr, "Opened database successfully\n");
   }
   sqlite3_close(db);
}

Я поместил приведенный выше код в test12_sqlite_database.cpp и поместил заголовок sqlite и исходный файл в каталог include. Затем я хочу создать этот код с помощью cl.exe. Это команда сборки:

cl /EHsc test12_sqlite_database.cpp /I include /link d:\sqlite\sqlite3.dll

Ошибка:

d:\sqlite\sqlite3.dll : fatal error LNK1107: invalid or corrupt file: cannot read at 0x360

После поиска в Интернете мне сказали, что я не могу подключиться к динамической библиотеке. Итак, как использовать cl, чтобы исходный код мог успешно скомпилироваться и мог использовать динамическую библиотеку?


person roscoe_x    schedule 04.10.2018    source источник
comment
На этом веб-сайте: tutorialspoint.com/sqlite/sqlite_c_cpp.htm   -  person roscoe_x    schedule 04.10.2018
comment
Кроме того, для вашего фактического вопроса... попробуйте не указывать /link. Это для передачи дополнительных параметров компоновщику и не требуется только для включения файла библиотеки (который должен быть указан так же, как имя файла, точно так же, как исходные файлы или объектные файлы). .lib, а не sqlite3.dll.   -  person Shawn    schedule 04.10.2018
comment
Так что это не сайт sqlite. Хорошо. - Все, что я видел, связанное с sqlite из tutorialspoint, было в лучшем случае неточным и в целом демонстрирует, как не надо делать, кстати. Я бы не использовал его на твоем месте.   -  person Shawn    schedule 04.10.2018
comment
В sqlite.org/download.html загрузка sqlite3.lib невозможна. Я снова ищу, его можно создать с помощью команды lib: для x64. Я попробую это первым...   -  person roscoe_x    schedule 04.10.2018


Ответы (1)


Вы не должны связывать файлы .dll, но вы должны связывать файлы .lib со своим проектом. Непонятно в вопросе, откуда вы взяли эту sqlite3.dll, почему у нее нет .lib файла для ее линковки и т.д. Он не отображается на sqlite.org, поэтому вы, вероятно, говорите о другом сайте.

Предлагаемый способ использования библиотеки SQLite — просто встроить ее непосредственно в ваше приложение. Это означает, что просто добавьте sqlite3.c и включите файлы sqlite3.h в свой проект, и он должен работать.

person Öö Tiib    schedule 04.10.2018
comment
Я получаю sqlite3.dll с sqlite.org/download.html, на этом сайте нет загрузки для sqlite3.lib. Но я проверил в Интернете, что вы можете преобразовать *.dll в *.lib, используя файл *.def. Я поместил sqlite3.h и sqlite3.c во включаемый файл. Все равно построить не удалось. - person roscoe_x; 05.10.2018
comment
Хорошо, я поместил sqlite3.c в папку проекта, и сборка проекта прошла успешно. Команда для cl: cl /EHsc test12_sqlite_database.cpp sqlite3.c /I include - person roscoe_x; 05.10.2018
comment
@roscoe_x это единственный способ, которым я его использовал. - person Öö Tiib; 05.10.2018