【发布时间】:2017-01-05 13:58:22
【问题描述】:
我尝试使用 VS2010 从源代码构建 SQLite v3,但遇到了我不知道如何解决的问题。
这就是我所拥有的: VS2010专业版。 使用 sqlite-amalgamation-3160100.zip 微软文章:SQLite databases
这就是我所做的:
- 创建了一个 C++“Win32 控制台应用程序”。
- 禁用预编译头文件。
- 添加了预处理器定义:(不要这样做,这是问题所在!) _HAVE_SQLITE_CONFIG_H;SQLITE_OS_WINRT;SQLITE_API=__declspec(dllexport); (由“SQLite 数据库”第 3 节指定。)
- 已创建 config.h(暂时为空。)
- 在项目中包含了来自 sqlite-amalgamation-3160100.zip 的源文件。
- 构建。
我得到了一些编译器错误
1> sqlite3.c
1>e:\andre\ontwikkeling\sqlite\sqlite-amalgamation-3160100\sqlite3.c(38515): error C2065: 'MapViewOfFileFromApp' : undeclared identifier
1>e:\andre\ontwikkeling\sqlite\sqlite-amalgamation-3160100\sqlite3.c(38515): error C2099: initializer is not a constant
1>e:\andre\ontwikkeling\sqlite\sqlite-amalgamation-3160100\sqlite3.c(38524): error C2065: 'CreateFile2' : undeclared identifier
....
...我试图解决。
第一个将我带到以下代码片段:
#if SQLITE_OS_WINRT && (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)
{ "MapViewOfFileFromApp", (SYSCALL)MapViewOfFileFromApp, 0 },
#else
{ "MapViewOfFileFromApp", (SYSCALL)0, 0 },
#endif
现在“MapViewOfFileFromApp”会导致MapViewOfFileFromApp function,“将文件映射视图映射到调用 Windows 应用商店应用程序的地址空间。”这是一个有效的 Microsoft 调用,我的项目设置缺少正确的配置。
我可以找到解决此问题的方法,但其他错误仅取决于 SQLITE_OS_WINRT,因此无法解决。
看起来我缺少一些配置选项,但我不知道是哪些。我阅读了所有记录在案的compile time options,但找不到我做错了什么。
我试图找到一个 VS2010 解决方案的工作示例,但一无所获。当然,我在这里检查了类似的问题! (如果有这方面的内容,那我错过了,抱歉。)
有人对我缺少的东西有什么建议吗?我的想法不多了。
* 2017 年 1 月 6 日编辑 *
在 MaxFurry 的建议下,我遵循了 blog by David Cravey 的步骤,它与我所做的步骤完全相同,但没有声明 SQLITE_OS_WINRT;SQLITE_API=__declspec(dllexport);。留下这两个定义解决了这个问题。
显然我误解了微软文章中的建议。
编译时问题已解决。
亲切的问候。
【问题讨论】: