我有 MinGW,我希望将SQLite 合并源编译成 64 位 dll。我对这种编译还很陌生,到目前为止我的努力都失败了。(我首先开始使用 autoconf 合并,并在 Linux 上使用了 configure & make 工具。但显然这对 Windows 二进制文件不起作用。)
无论如何,有人告诉我我需要以下预处理器定义:
以下是我用于 64 位版本构建的编译器预处理器定义:
- WIN64 NDBUG
- _视窗
- _USRDLL
- NO_TCL
- _CRT_SECURE_NO_DEPRECATE
- 线程安全=1
- TEMP_STORE=1
- SQLITE_MAX_EXPR_DEPTH=0
以下是我用于 32 位发布版本的编译器预处理器定义:
- WIN32
- NDBUG
- _视窗
- _USRDLL
- NO_TCL
- _CRT_SECURE_NO_DEPRECATE
- 线程安全=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
MinGW-64 预编译:http: //sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Automated%20Builds/mingw-w64-bin_i686-mingw_20111220.zip/download ?use_mirror=ignum
安装说明:http ://code.google.com/p/tonatiuh/wiki/InstallingMinGWForWindows64