Я не могу понять, как заставить sqlite3.dll (или любую dll в этом отношении) работать с моим C ++ проектом в Visual Studio.
Я получаю сообщение об ошибке: LNK2001 неразрешенный внешний символ sqlite3_open
Вот что я сделал до сих пор:
lib /def:sqlite3.def
(в значительной степени следовал инструкциям, увиденным Вот)
Спасибо за помощь
Проблема заключается в том, что по умолчанию заголовочный файл предполагает статическое связывание sqlite, а не динамическое связывание с dll.
Эта часть sqlite3.h отвечает за это:
#ifndef SQLITE_API
# define SQLITE_API
#endif
Если вы задаете для каждого проекта определение в свойствах проекта:
SQLITE_API=__declspec(dllimport)
это должно решить вашу ошибку ссылки.
Кроме того, вы можете поставить
#define SQLITE_API __declspec(dllimport)
прямо перед тем, где вы #include sqlite3.h.
Трудно сказать, почему именно возникла проблема. Есть много причин, которые могут вызвать LNK2001
ошибка. MSDN содержит хороший контрольный список.
Вы можете попробовать использовать /VERBOSE
возможность определить, на какие файлы ссылается компоновщик. Поместите эту опцию в Project -> Preferences -> Linker -> Command Line -> Additional Options
, Вывод должен содержать похожие строки:
Searching e:\SQLite\sqlite-dll-win32-x86-3150100\sqlite3.lib:
Found _sqlite3_open
Referenced in ConsoleApplication2.obj
Loaded sqlite3.lib(sqlite3.dll)
Обратите внимание на библиотеки времени выполнения VS, между библиотеками Debug и Release не должно быть путаницы.