如何为 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Windows 上构建的 libxml2.dll 生成清单文件?