试图在MINGW C中调用SQLITE3函数-程序的行为不符合预期。我怀疑问题出在.a文件附近,但是看不到哪里或为什么没有输出。
通过nuwen.net在Windows 10的c:\ mingw中安装了最新的MinGW Distro。
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-amalgamation-3260000.zip,sqlite-dll-win64-x64-3260000.zip和sqlite-tools-win32-x86-3260000.zip。
将标题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文件约为200K(尽管我注意到.DLL的大小是10倍)。我将生成的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");
}
}
我使用gcc test3.c -lsqlite3编译没有错误
我运行a.exe并没有看到任何内容-连打印的“开始”字符串都没有
我仅注释掉“ sqlite3_open”行,并使用相同的命令重新编译,然后再次运行,然后看到
C:\c>a
Start
Could not open database.
由于在调用sqlite3函数时行为是意外的,并且.a文件是.DLL大小的十分之一,因此我怀疑问题出在这里-但仍然看不到为什么不输出“开始”。