私はMinGWを持っていて、SQLiteアマルガメーションソースを64ビットdllにコンパイルしたいと思っています。私はこの種のコンパイルにかなり慣れていませんが、これまでの努力は失敗に終わりました。(私は最初にautoconfの融合を使い始め、Linuxでconfigure&makeツールを使いました。しかし、どうやらそれはWindowsバイナリでは機能しないようです。)
とにかく、私は次のプリプロセッサ定義が必要だと言われました:
64ビットリリースビルドに使用するコンパイラプリプロセッサ定義は次のとおりです。
- WIN64 NDEBUG
- _ウィンドウズ
- _USRDLL
- NO_TCL
- _CRT_SECURE_NO_DEPRECATE
- THREADSAFE = 1
- TEMP_STORE = 1
- SQLITE_MAX_EXPR_DEPTH = 0
32ビットリリースビルドに使用するコンパイラプリプロセッサ定義は次のとおりです。
- WIN32
- NDEBUG
- _ウィンドウズ
- _USRDLL
- NO_TCL
- _CRT_SECURE_NO_DEPRECATE
- THREADSAFE = 1
- TEMP_STORE = 1
- SQLITE_MAX_EXPR_DEPTH = 0
私はこれらをどこに入れるべきかわかりませんでした。私は最終的に知識に基づいた推測を行い、sqlite3w64.hという名前の新しいファイル(きちんとしたもの)を作成し、次のように貼り付けました。
#define WIN64 NDEBUG
#define _WINDOWS
#define _USRDLL
#define NO_TCL
#define _CRT_SECURE_NO_DEPRECATE
#define THREADSAFE 1
#define TEMP_STORE 1
#define SQLITE_MAX_EXPR_DEPTH 0
次に、次のコマンドを使用してソースをコンパイルしました。
gcc sqlitew64.h sqlite3.h sqlite3ext.h shell.c sqlite3.c -o sqlite_x64.dll
結果として、733KBのDLLファイルが作成されました。良い!それは実際に機能しましたか?やりました-BadImageFormatExceptionが発生しました。次に、同じ方法を使用してx86コンパイルを実行してみました。もう一度、733KBのDLLファイルを取得し(それは奇妙ですか?)、もう一度、BadImageFormatExceptionを取得しました。
ヘルプ。
アップデート
代わりに次のコマンドを使用しました。
gcc -shared -DWIN64 -DNDEBUG -D_WINDOWS -D_USRDLL -DNO_TCL -D_CRT_SECURE_NO_DEPRECATE -DTHREADSAFE=1 -DTEMP_STORE=1 -DSQLITE_MAX_EXPR_DEPTH=0 -I. shell.c sqlite3.c -o sqlite_x64.dll -Wl,--out-implib,sqlite3.a
740KBのDLLファイルが生成されましたが、それでもBadImageFormatExceptionが発生します。
最終更新
私のMinGWビルドは32ビットのみでした。64ビットバージョンを入手すると、64ビット用のSQLiteを作成できました。フラグ-m64を追加すると、コンパイラが64ビットモードに設定されます。
64ビット:
gcc -shared -DWIN64 -DNDEBUG -D_WINDOWS -D_USRDLL -DNO_TCL -D_CRT_SECURE_NO_DEPRECATE -DTHREADSAFE=1 -DTEMP_STORE=1 -DSQLITE_MAX_EXPR_DEPTH=0 -m64 -I. shell.c sqlite3.c -o sqlite3_x64.dll -Wl,--out-implib,sqlite3_x64.a
32ビット:
gcc -shared -DWIN32 -D_WINDOWS -D_USRDLL -DNO_TCL -D_CRT_SECURE_NO_DEPRECATE -DTHREADSAFE=1 -DTEMP_STORE=1 -DSQLITE_MAX_EXPR_DEPTH=0 -m32 -I. shell.c sqlite3.c -o sqlite3_x86.dll -Wl,--out-implib,sqlite3_x86.a
インストール手順:http ://code.google.com/p/tonatiuh/wiki/InstallingMinGWForWindows64