如何为 Windows 编译 lsqlite3?

Posted

技术标签:

【中文标题】如何为 Windows 编译 lsqlite3?【英文标题】:How can I compile lsqlite3 for Windows? 【发布时间】:2021-12-14 07:09:20 【问题描述】:

我有一个在 Ubuntu Linux 中开发的 C++ 项目。这个 C++ 项目不是我写的。此外,它在 Ubuntu 下运行没有任何问题。

我正在尝试使用 GCC/G++ 编译器和 Visual Studio 2019 IDE 在 Windows 10 下编译项目。我离成功很近了。

该项目的 CMakeList.txt 文件中有以下几行:

find_package(sqlite3)
if (SQLITE3_FOUND)
  message("Sqlite3 found")
  include_directories($SQLite3_INCLUDE_DIRS)
  SET(CMAKE_CXX_FLAGS_RELEASE " -DSQLITE3 $CMAKE_CXX_FLAGS_RELEASE")
  SET(CMAKE_CXX_FLAGS_DEBUG " -DSQLITE3 $CMAKE_CXX_FLAGS_DEBUG")
  SET(CMAKE_EXE_LINKER_FLAGS "-lsqlite3")
  SET(CMAKE_SHARED_LINKER_FLAGS "-lsqlite3")
else()
  message("Sqlite3 not found")
endif (SQLITE3_FOUND)

我需要 lsqlite3。我找到了the source code,但使用 GCC 编译失败:

C:\Users\pc\Downloads\sqlite3\lsqlite3-master\lsqlite3-master>mingw32-make
FIND: Parameter format not correct
FIND: Parameter format not correct
luarocks make

Error: Please specify which rockspec file to use.
luarocks make

Error: Please specify which rockspec file to use.

C:\Users\pc\Downloads\sqlite3\lsqlite3-master\lsqlite3-master>mingw32-make lsqlite3complete-0.9.4-2.rockspec
mingw32-make: Nothing to be done for 'lsqlite3complete-0.9.4-2.rockspec'.

C:\Users\pc\Downloads\sqlite3\lsqlite3-master\lsqlite3-master>

文件 lsqlite3.c 包含#include "lua.h"#include "lauxlib.h"。看来他们来自Lua for Windows项目。

如何为 Windows 编译 lsqlite3 并将其链接到我现有的 CPP 项目的端口?

应该用 GCC 还是 Lua 编译?

【问题讨论】:

"这告诉我,我需要 lsqlite3" - 嗯?对我来说,“multiple definition”错误除了缺少库之外什么都没有。例如。 ../bin/libMyLinuxBasedCppProject.a(DataTable.cc.obj):C:\Users\pc\source\repos\MyLinuxBasedCppProject\out\build\Mingw64-Debug/../../../src/utils/string_utils.hh:139: first defined here 行告诉我您在 header定义一个(非内联)函数,这是不受欢迎的:***.com/questions/583255/… FIND: Parameter format not correct 可能意味着makefile 是为Linux 编写的并且使用find 命令。 Windows 和 Linux 上find 之间的参数不同。所以,我认为您使用的 makefile 不是针对 Win32。 【参考方案1】:

你大错特错了。链接器标志-lsqlite3 的意思是“与libsqlite3.so 链接。要编译的正确库是SQLite3。如果您在Windows 上编译时遇到问题,那么在SO 上有很多关于它的问题。

【讨论】:

github.com/jgranick/sqlite/tree/master/ndll/android 在上面的链接中,我看到lsqlite.so是一个Android兼容文件。我正在 Windows 下编译 C++ 源代码。那么,我该如何链接呢? 请阅读the official build Instructions,您实际上必须构建和链接单个 C 文件。

以上是关于如何为 Windows 编译 lsqlite3?的主要内容,如果未能解决你的问题,请参考以下文章

Octave:如何为 mkoctfile 指定参数

如何为 Windows 上构建的 libxml2.dll 生成清单文件?

如何为 [Setup] AppVersion 使用编译时环境变量?

如何为 Intranet 预编译 MVC?

Windows 如何为线程挑选内存?

如何为自定义 CPU 创建 C 编译器?