vs - vs2013中编译sqlite3.44.2

文章目录

vs - vs2013中编译sqlite3.44.2

概述

以前在vs2019下编译了sqlite3.44.2, 好使。做了笔记(sqlite3.44.2的编译)

现在准备将手头的vs2019工程改为vs2013的,自然要将sqlite也编译为vs2013版本的。

按照原来的笔记编译,不好使。

估计是TCL不是VS2013版本的。

准备按照官方说明,用VS2013从头编译一次。

官方的编译文档为 D:\3rd_prj\sqlite\doc\compile-for-windows.md. 是按照vs2022 + win11 来描述的。

看看vs2013 + win10行不行。

笔记

git库地址 https://github.com/sqlite/sqlite.git

迁出到本地 D:\3rd_prj\sqlite,切到3.44.2

下载TCL

https://www.tcl.tk/software/tcltk/download.html

需要8.6版本或更高版本

查了一下,我上次编译用的tcl8613版本,本地就有,不重新下载了。

E:\tools\database\sqlite3.44.2\tcl8613-src.zip

代码解开到 E:\tools\database\sqlite3.44.2\tcl8613-src_vs2013

我只想编译vs2013x64版本的sqlite, tcl编译也用vs2013.

打开vs2013x64本地命令行

bash 复制代码
cd /d E:\tools\database\sqlite3.44.2\tcl8613-src_vs2013\tcl8.6.13\win
nmake /f makefile.vc release
nmake /f makefile.vc INSTALLDIR=d:\TCL_vs2013 install
将 D:\TCL_vs2013\lib\tcl86t.lib 拷贝为 D:\TCL_vs2013\lib\tcl86.lib
将 D:\TCL_vs2013\bin\tclsh86t.exe 拷贝为 D:\TCL_vs2013\bin\tclsh.exe

将 D:\TCL_vs2013\bin\ 加入PATH环境变量

关掉现有的VS2013x64本地命令行

开一个新的VS2013x64本地命令行

bash 复制代码
set TCLDIR=D:\TCL_vs2013
cd /d D:\3rd_prj\sqlite
nmake /f makefile.msc

shell.c中有错误,按照提示修正一下。

bash 复制代码
shell.c
shell.c : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
shell.c(612) : warning C4204: 使用了非标准扩展 : 非常量聚合初始值设定项
shell.c(709) : error C2065: "ENABLE_VIRTUAL_TERMINAL_PROCESSING": 未声明的标识符
shell.c(732) : warning C4204: 使用了非标准扩展 : 非常量聚合初始值设定项
shell.c(26306) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
shell.c(26315) : error C2001: 常量中有换行符
shell.c(26316) : error C2143: 语法错误 : 缺少";"(在"const"的前面)
shell.c(26330) : error C2065: "zBom": 未声明的标识符
shell.c(26330) : warning C4047: "=":"int"与"const char *"的间接级别不同
shell.c(26397) : error C2065: "zBom": 未声明的标识符
shell.c(26397) : warning C4047: "函数":"const char *"与"int"的间接级别不同
shell.c(26397) : warning C4024: "oPutsUtf8": 形参和实参 1 的类型不同
shell.c(26410) : error C2065: "zBom": 未声明的标识符
shell.c(26410) : warning C4047: "函数":"const char *"与"int"的间接级别不同
shell.c(26410) : warning C4024: "oPutsUtf8": 形参和实参 1 的类型不同
sqlite3.c
正在生成代码...
NMAKE : fatal error U1077: ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\cl.EXE"": 返回代码"0x2 "
Stop.

根据 https://learn.microsoft.com/zh-cn/windows/console/setconsolemode

修改makefile.msc, 添加 ENABLE_VIRTUAL_TERMINAL_PROCESSING 的定义

bash 复制代码
###############################################################################
############################## START OF OPTIONS ###############################
###############################################################################

# add by ls
!IFNDEF ENABLE_VIRTUAL_TERMINAL_PROCESSING
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4
!ENDIF

# The toplevel directory of the source tree.  This is the directory
# that contains this "Makefile.msc".
#
TOP = .

再次尝试nmake

bash 复制代码
nmake /f makefile.msc clean
nmake /f makefile.msc

不行,还是报错。

那直接在shell.c中改。

c 复制代码
# if CIO_WIN_WC_XLATE
/* Define console modes for use with the Windows Console API. */
#  define SHELL_CONI_MODE \
  (ENABLE_ECHO_INPUT | ENABLE_INSERT_MODE | ENABLE_LINE_INPUT | 0x80 \
  | ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS | ENABLE_PROCESSED_INPUT)

#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#endif 

#  define SHELL_CONO_MODE (ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT \
  | ENABLE_VIRTUAL_TERMINAL_PROCESSING)
# endif

再次尝试nmake

bash 复制代码
nmake /f makefile.msc

ENABLE_VIRTUAL_TERMINAL_PROCESSING的报错没有了,继续解决其他的编译报错。

bash 复制代码
shell.c
shell.c : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
shell.c(612) : warning C4204: 使用了非标准扩展 : 非常量聚合初始值设定项
shell.c(737) : warning C4204: 使用了非标准扩展 : 非常量聚合初始值设定项
shell.c(26304) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
shell.c(26320) : error C2001: 常量中有换行符
shell.c(26321) : error C2143: 语法错误 : 缺少";"(在"const"的前面)
shell.c(26335) : error C2065: "zBom": 未声明的标识符
shell.c(26335) : warning C4047: "=":"int"与"const char *"的间接级别不同
shell.c(26402) : error C2065: "zBom": 未声明的标识符
shell.c(26402) : warning C4047: "函数":"const char *"与"int"的间接级别不同
shell.c(26402) : warning C4024: "oPutsUtf8": 形参和实参 1 的类型不同
shell.c(26415) : error C2065: "zBom": 未声明的标识符
shell.c(26415) : warning C4047: "函数":"const char *"与"int"的间接级别不同
shell.c(26415) : warning C4024: "oPutsUtf8": 形参和实参 1 的类型不同
sqlite3.c
正在生成代码...
NMAKE : fatal error U1077: ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\cl.EXE"": 返回代码"0x2 "
Stop.

在VSCODE中可以看到26320行有乱码,删掉这个乱码字符,继续尝试编译。

bash 复制代码
nmake /f makefile.msc
bash 复制代码
.c  /link /pdb:sqlite3sh.pdb /DEBUG  /NOLOGO /MACHINE:X64   sqlite3res.lo
shell.c
shell.c : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
shell.c(612) : warning C4204: 使用了非标准扩展 : 非常量聚合初始值设定项
shell.c(737) : warning C4204: 使用了非标准扩展 : 非常量聚合初始值设定项
sqlite3.c
正在生成代码...
d:\3rd_prj\sqlite\shell.c(20382) : warning C4756: 常量算法中溢出
LINK : 没有找到 sqlite3.exe 或上一个增量链接没有生成它;正在执行完全链接

编译成功了,虽然有警告,咱也不知道咋解决,先这样。

已经生成了sqlite3.dll.

测试一下

bash 复制代码
nmake /f makefile.msc releasetest

初步看,好像编译的没问题,等待测试完成。

好像测试出错误来了,不过等不起,算了。

如果在程序中用到sqlite出错时,再想办法解决。

工程输出归档

END

相关推荐
零域码客10 小时前
从 SQLite 到 PostgreSQL:轻量单机到分布式架构选型、避坑与迁移全解析
分布式·postgresql·sqlite·wal·架构设计·后端开发·数据库选型
小白勇闯网安圈2 天前
Django 响应对象、文件上传与类视图
数据库·django·sqlite
深念Y2 天前
OpenCode写入优化方案
sqlite·配置·ssd·日志·上下文·opencode·写入
C++ 老炮儿的技术栈5 天前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
在世修行7 天前
从零打造 C# 工业视觉检测系统(九):工厂模式实现 SQL Server / MySQL / SQLite 三库切换
mysql·sqlite·c#·工厂模式
JLWcai202510097 天前
核电打磨 “安全卫士”|金利威不锈钢专用树脂砂轮,合规高效双在线
mysql·mongodb·eureka·sqlite·rabbitmq·nosql·memcached
qq21084629538 天前
PostgreSQL、SQLite、Redis、TDengine
redis·postgresql·sqlite
梦想三三9 天前
Python从零实现AI Agent电商客服(Qwen/Ollama+SQLite源码解析)
人工智能·python·sqlite
雪隐11 天前
WPF + MVVM 实战系列01-一个老狗回炉重造 WPF 的 12 天血泪史
sqlite·c#·mvvm
小王同学666611 天前
Django 5 中实现文件上传功能
数据库·django·sqlite