Компиляция SQLite для Windows (64-битная версия)

У меня есть MinGW, и я хочу скомпилироватьSQLite источник объединения в 64-битную DLL. Я довольно новичок в этом виде компиляции, и мои усилия до сих пор привели к провалу. (Я впервые начал использовать объединение autoconf и использовал инструмент configure & amp; make в Linux. Но, очевидно, это никогда не будет работать для двоичных файлов Windows.)

Во всяком случае, мне сказали, что мне нужно следующее определение препроцессора:

Here are the compiler pre-processor defines I use for a 64-bit release build:

WIN64 NDEBUG _WINDOWS _USRDLL NO_TCL _CRT_SECURE_NO_DEPRECATE THREADSAFE=1 TEMP_STORE=1 SQLITE_MAX_EXPR_DEPTH=0

Here are the compiler pre-processor defines I use for a 32-bit release build:

WIN32 NDEBUG _WINDOWS _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

Результатом стал файл DLL размером 733 КБ. Ницца! Это на самом деле работает? Сделал это с ума - я получил исключение BadImageFormatException. Затем я попытался выполнить компиляцию x86, используя тот же метод. Я снова получил DLL-файл размером 733 КБ (это странно?) И еще раз получил исключение BadImageFormatException.

Помогите.

Update

Вместо этого использовал следующую команду:

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

В результате получается файл DLL размером 740 КБ, который по-прежнему создает исключение BadImageFormatException.

Final Update

Оказывается, моя сборка MinGW была только 32-битной. Получение 64-битной версии позволило мне сделать SQLite для 64-битной. Добавление флага -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

Ответы на вопрос(2)

Ваш ответ на вопрос