0
  1. 我正在使用使用 ming gcc 的 dev c++ IDE(我不确定)
  2. 我想在我的 win32 c 应用程序中使用 sqlite3
  3. 我下载了 sqlite3.dll 和 sqlite3.dev 并使用 dlltool 创建了一个类似 libsqlite3.a 的 .a 文件并粘贴到 dev cpp 的 lib 文件夹中,并在项目选项 -> 参数中添加了这个路径
  4. 我将头文件 sqlite3.h 复制到包含文件夹中(我从另一个网站获得 - http://www.opensource.apple.com/source/SQLite/SQLite-74/derived_source/sqlite3.h
  5. 我执行了程序并收到消息“程序无法启动,因为您的计算机中缺少 sqlite3.dll”
  6. 所以我将 sqlite3.dll 复制到我的工作目录中,然后它就可以工作了

如何在编译时使 sqlite.* 静态?

我的意思是我认为通过包含 libsqlite3.a,最终的 exe 将不依赖于任何外部 dll。

因此,我想知道如何以不需要 dll 的方式进行编译,并通过这样做使我的 windows 程序独立。

我有创建一个 .lib 文件而不是 .a 文件吗?

回答和评论后编辑:此外,devpak工作正常......但我想知道如何将文件包含到项目或创建.a文件所以我正在尝试这种方式,因为如果某些组件不提供devpak那么这将是我们需要编译的方式..不是吗?

编辑以显示我在 CL 的回答和两条评论之后所做的事情

这就是我将 sqlite.c 添加到项目列表的方式

在此处输入图像描述

这是编译日志

编译器:默认编译器

构建 Makefile:“C:\Users\jayapalc\Documents\test-sqlite\Makefile.win”

执行制作...

make.exe -f "C:\Users\jayapalc\Documents\test-sqlite\Makefile.win" 全部

g++.exe -c sqlite3.c -o sqlite3.o -I"lib/gcc/mingw32/3.4.2/include" -I"include/c++/3.4.2/backward" -I"include/c++/3.4. 2/mingw32" -I"include/c++/3.4.2" -I"include"

sqlite3.c:在函数“void strftimeFunc(sqlite3_context*,int,sqlite3_value**)”中:

sqlite3.c:14727:错误:从void*' tochar*'进行的无效转换

我在 sqlite.org/sqlite-amalgamation-3071502.zip 中得到的文件是

shell.c、sqlite3.h、sqlite3.c、sqlite3ext.h,我在其他讨论中看到不需要 shell.c...

此外,人们在谈论 gcc 和 g++...。

4

2 回答 2

1

只需在项目中包含sqlite3.c文件即可。

您只需要这个文件,并且它必须编译为 C,而不是 C++。

显然,Dev-C++ 不允许在一个项目中混合 C 和 C++ 源文件。相反,您可以尝试编译sqlite3.c为 C,然后将生成的 .o 文件包含到 C++ 项目中(在链接器页面上)。

于 2013-02-13T15:13:03.967 回答
1

除了更新 Dev-C++ 本身,尝试将 sqlite.c 编译为 C 文件:

  • 转到项目>>项目选项>>文件。
  • 找到我们正在谈论的C文件。取消勾选“将文件编译为 C++”。

这应该通知 Dev-C++ 它应该调用 gcc.exe,而不是 g++.exe。

如果您不想通过将 sqlite 添加到项目中来自己编译它,可以尝试将 -static 标志传递给 GCC/G++ 以强制它静态链接 libsqlite.a。

于 2013-02-14T11:36:36.457 回答