2016-11-10 69 views
0

Visual StudioのC++プロジェクトでsqlite3.dll(またはそれに関するDLL)を使用する方法を理解できません。Visual Studio 2015(C++)sqlite3.dll未解決の外部シンボル

私が取得エラーメッセージがここで私はこれまでやったことだ

sqlite3_open LNK2001未解決の外部シンボルである:

  • 私は/ sqlite3.dll
  • myProjectFoler /リソースの.dllファイルを置きますVisual Studio Developerのコマンドプロンプトでコマンドを使用してsqlite3.libを生成しましたlib /def:sqlite3.def
  • libでディレクトリを参照しましたPプロジェクトの設定 - >リンカ - >入力 - >その他の依存関係
  • 私はsqlite3.hをmyに配置しました。プロジェクトと

それをインクルード(ほとんどがhere見指示に従っ)

は、問題は、デフォルトでは、ヘッダファイルがsqliteのが静的にリンクされていることを前提としていることであるヘルプ

答えて

3

いただきありがとうございます、 DLLとの動的リンクとは対照的です。

sqlite3.hのこの部分は、そのための責任がある:

#ifndef SQLITE_API 
# define SQLITE_API 
#endif 

あなたはプロジェクト単位で設定した場合、プロジェクトのプロパティで定義します。

SQLITE_API=__declspec(dllimport) 

これはあなたのリンクエラーを解決する必要があります。 また、あなたは右、あなたがsqlite3.hを#include場所前に

#define SQLITE_API __declspec(dllimport) 

を置くことができます。

+0

私はプロジェクトごとの定義が何を意味するのかは不明ですが、#include sqlite3.hの前に提供したコードを追加すると残念です。 – finrod

+0

私の悪い__declspec(dllimport) –

+0

ありがとう、しかし、それはまだ同じミスを犯します**編集:**唯一の違いは、今は** __ imp_sqlite3_open **の代わりに** sqlite3_open ** – finrod

0

問題が発生した理由を正確に伝えるのは難しいです。 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ライブラリの間にミックスアップはありません。

+0

だから私は冗長オプションを追加し、パス/ sqlite3.libの後に 'found'と答えてロードしませんでした。しかし、私は理解していない、パスは間違いなく正しいです。 – finrod

+0

@finrod成功の場合のリンカ出力を追加しました。それ以外の場合は、リンカーの設定を再度確認してください。設定したのと同じ設定を行いますか?デバッグとビルドのデバッグ? – Nikita

+0

私はリンカーの設定を三重にチェックしました。すべての設定に対してそれを設定しました。その間、私はプロジェクトにsqlite3.cを追加しました。ビルドはもう少し長くなりますが、少なくとも動作します。私はこれを理解したいと思います。努力をいただきありがとうございます。 – finrod

関連する問題