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

相关推荐
漫谈网络14 小时前
sqlite3 命令行工具详细介绍
sql·sqlite·db
编程大全1 天前
41道Django高频题整理(附答案背诵版)
数据库·django·sqlite
践行见远2 天前
django之请求处理过程分析
数据库·django·sqlite
noravinsc2 天前
django ssh登录 并执行命令
django·sqlite·ssh
Navicat中国3 天前
Edge Databases:赋能分布式计算环境
前端·数据库·edge·sqlite
不剪发的Tony老师4 天前
sqlite-vec:谁说SQLite不是向量数据库?
数据库·人工智能·sqlite
獨枭5 天前
SQLite 中文写入失败问题总结
sqlite
qx095 天前
sqlite3的封装
jvm·数据库·sqlite
老猿讲编程9 天前
SQLite软件架构与实现源代码浅析
数据库·sqlite
陈王卜9 天前
Django orm详解--组成部件
数据库·django·sqlite