MINGW + SQLITE3 - проблемы с DLL / компоновщиком - PullRequest
0 голосов
/ 20 декабря 2018

Попытка вызова функций SQLITE3 в MINGW C - программа не работает должным образом.Я подозреваю, что проблема связана с файлом .a, но я не вижу, где и почему нет вывода.

Установлен последний дистрибутив MinGW с nuwen.net в Windows 10 в c: \ mingw.

C:\c>gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../src/configure --enable-languages=c,c++ --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --disable-multilib --prefix=/c/temp/gcc/dest --with-sysroot=/c/temp/gcc/dest --disable-libstdcxx-pch --disable-libstdcxx-verbose --disable-nls --disable-shared --disable-win32-registry --with-tune=haswell --enable-threads=posix --enable-libgomp
Thread model: posix
gcc version 8.1.0 (GCC)

Загруженные sqlite-amalgamation-3260000.zip, sqlite-dll-win64-x64-3260000.zip и sqlite-tools-win32-x86-3260000.zip с sqlite.org.

Заголовки sqlite3.h и sqlite3ext.h были скопированы из sqlite-amalgamation-3260000.zip в каталог include \ sqlite3.

Файлы sqlite3.def и sqlite3.dll были извлечены из sqlite-dll-win64-x64-3260000.zip во временный каталог.

Во временном каталоге я запустил dlltool -U -d sqlite3.def -l libsqlite3.a (как описано в http://www.mingw.org/wiki/createimportlibraries). (обратите внимание, что я пробовал с и без -Флаги U и -k)

Не было выведено ни одного сообщения, а размер файла libsqlite3.a составляет около 200 КБ (хотя я отмечаю, что .DLL имеет размер 10x). Я скопировал получившийся файл libsqlite3.a в каталог lib.

Я пишу небольшую программу test3.c, чтобы проверить, могу ли я вызвать sqОблегченная функция правильно:

#include <stdio.h>
#include "sqlite3\sqlite3.h"

sqlite3* db;

int main() {

    printf("Start\n");

    sqlite3_open("test.db", &db);

    if(db == 0) {
        printf("Could not open database.\n");
    }
    else {
    printf("Database Open \n");
    }
}

Я компилирую без ошибок, используя: gcc test3.c -lsqlite3

Я запускаю a.exe и абсолютно ничего не вижу - даже напечатанная строка «Старт»

Я закомментирую только строку "sqlite3_open" и перекомпилирую с той же командой, затем снова запускаю, и я вижу

C:\c>a
Start
Could not open database.

Поскольку поведение является неожиданным при вызове функции sqlite3 и как .aразмер файла составляет одну десятую от размера .DLL, я подозреваю, что проблема там - но все еще не может понять, почему «Старт» не выводится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...