【问题标题】:dev cpp win32 the program can't start because sqlite3.dll is missingdev cpp win32 程序无法启动,因为 sqlite3.dll 丢失
【发布时间】:2013-01-29 02:01:17
【问题描述】:
  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 文件吗?

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

编辑显示我在 CL 和两个 cmets 回答后做了什么

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

这是编译日志

编译器:默认编译器

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

正在执行 make...

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++...。

【问题讨论】:

标签: winapi sqlite static-libraries dev-c++


【解决方案1】:

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

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

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

【讨论】:

  • 如何包含它?到项目属性,如添加库或作为标题...只是尝试作为标题并得到许多无效的转换错误...通常是一个组件用于提供 .a 文件和头文件...但是...这里我不知道如何继续。
  • 作为源文件,就像您的其他 C/C++ 文件一样。
  • 是的,我做了...但是我得到了无效的转换...我已经用编辑标题更新了我的问题。此外,我在其他讨论中读到了同样的问题,但不确定他做了什么……这是链接……cplusplus.com/forum/general/24340
  • 是的。那行得通。谢谢。此外,我所做的是我创建了一个新项目并选择了一个 c 项目并且它有效。(以前我一直选择作为 cpp 项目)。所以通过选择 c 项目使用 gcc 并通过选择 c++ 项目使用 g++ ......我的假设是否正确?
  • 如果我想让它与 c++ 项目一起工作,我应该怎么做?我的意思是选择作为 c++ 项目并想使用 sqlite3.c 它会工作吗?或者是 sqlite3.c 仅适用于 c 项目而不适用于 c++...?
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 2012-01-03
    • 2019-03-21
    • 2011-06-09
    • 2013-03-15
    • 2017-09-04
    相关资源
    最近更新 更多