C MINGW&x2B;SQLITE3-DLL/链接器问题

C MINGW&x2B;SQLITE3-DLL/链接器问题,c,sqlite,mingw,C,Sqlite,Mingw,试图在MINGW C-program中调用SQLITE3函数的行为与预期不符。我怀疑问题出在.a文件上,但看不到没有输出的位置或原因 从nuwen.net在Windows 10上的c:\MinGW中安装了最新的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-wrappe

试图在MINGW C-program中调用SQLITE3函数的行为与预期不符。我怀疑问题出在.a文件上,但看不到没有输出的位置或原因

从nuwen.net在Windows 10上的c:\MinGW中安装了最新的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.org下载sqlite-mergation-326000.zip、sqlite-dll-win64-x64-326000.zip和sqlite-tools-win32-x86-326000.zip

标题sqlite3.h和sqlite3ext.h从sqlite-mergation-326000.zip复制到include\sqlite3目录

文件sqlite3.def和sqlite3.dll从sqlite-dll-win64-x64-326000.zip提取到临时目录

在临时目录中,我运行了dlltool-U-dsqlite3.def-l libsqlite3.a(如中所述)。 (注意:我尝试了使用和不使用-U和-k标志)

没有输出任何消息,libsqlite3.a文件大约为200K(尽管我注意到.DLL的大小是10x)。我将结果libsqlite3.a复制到lib目录

我编写了一个快速test3.c程序,只是为了检查我是否可以正确调用sqlite函数:

#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");
    }
}

由于调用sqlite3函数时的行为是意外的,并且.a文件的大小是.DLL的十分之一,因此我怀疑存在问题-但仍然无法理解为什么没有输出“Start”。

您需要检查
sqlite3\u open()
的返回值。它仍然分配一个数据库句柄,并在出现故障时设置指向它的db指针,因此您可以将它与
sqlite3\u errmsg()
一起使用。请参阅文档:非常感谢-但问题是我无法让printf输出任何内容-甚至是来自sqlite3_errstr()的错误字符串。无论发生什么,似乎都会影响程序的其余部分,而不仅仅是sqlite3_open()。我还尝试添加SQLITE3XORD(DB)来查看地址是否存在问题(它没有)。我甚至进一步缩小了它的范围——只使用SQLITE3LIbVC++(即)不试图实际打开任何东西——也有同样的失败。我只是在项目中包括sqlite3.c,而不是使用库版本。能够依赖给定的版本,启用已知的功能,这很好,而且不用担心依赖性。是的!这在没有库和sqlite3.c的情况下是有效的。谢谢
C:\c>a
Start
Could not open database.