2019年10月9日水曜日

sqlcipher 対応のWindows x64版 sqlite3.dll をビルドした忘備録

前回の忘備録から3年

x64 版の sqlcipher 対応 dll をビルドしてくださいと言われて、気分はもにょーん。

sqlcipher-4.2.0 をダウンロードしてきて、ActiveTcl の32bit版、バージョン古い方を入れて
C:\Work\sqlcipher-4.2.0> nmake -f makefile.msc SQLITE_HAS_CODEC=1 USE_CRT_DLL=1 PLATFORM=x64
ってやったら、
sqlite3.c(30924): error C2061: 構文エラー: 識別子 'CRITICAL_SECTION'
sqlite3.c(30931): error C2059: 構文エラー: '}'
sqlite3.c(30986): error C2079: 'winMutex_staticMutexes' が 未定義の struct 'sqlite3_mutex' で使用しています。
sqlite3.c(30999): fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
となって、ビルドできない。
Makefile.msc を追っていくと、ライブラリのパスが間違ってる、リンクオプションがメタメタ、その他諸々設定が反映されず、とにかくビルドできるような状況にもっていくのが大変そうだった。

そこで、nmake して生成された sqlite3.c sqlite3.h sqlite3ext.h sqlite3session.h から DLL をビルドした方が簡単な気がして試してみた。

空のDLLプロジェクトを作成

そして、sqlite3.c sqlite3.h sqlite3ext.h sqlite3session.h をプロジェクトに追加する。
プリプロセッサの定義として
SQLITE_API=__declspec(dllexport)
SQLITE_HAS_CODEC=1
を追加すればOKだ。 vcpkg を導入済みであれば、openssl もあっけなくリンクされてくる。
x64 は、stdcall 形式がなく cdecl 形式で、以下のようにエクスポートされている。

0 件のコメント: