无法在Windows上生成sqlcipher3



在构建sqlcipher后,将sqlite3.c和sqlite3.h复制到根文件夹中,我正在尝试构建sqlcipher3(在Windows 10,Python 3.9.0上(:

C:devpysqlcipher3# setup.py build_static build
running build_static
Builds a C extension using a sqlcipher amalgamation
building 'sqlcipher3._sqlite3' extension
C:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsMSVC14.28.29333binHostX86x64cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DMODULE_NAME="sqlcipher3.dbapi2" -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS3_PARENTHESIS=1 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_JSON1=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_STAT4=1 -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_SOUNDEX=1 -DSQLITE_USE_URI=1 -DSQLITE_TEMP_STORE=2 -DSQLITE_MAX_VARIABLE_NUMBER=250000 -DSQLITE_DEFAULT_PAGE_SIZE=4096 -DSQLITE_DEFAULT_CACHE_SIZE=-8000 -Dinline=__inline -I. -IC:OpenSSL-Win64include -IC:Pythoninclude -IC:Pythoninclude -IC:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsMSVC14.28.29333include -IC:Program Files (x86)Windows KitsNETFXSDK4.8includeum -IC:Program Files (x86)Windows Kits10include10.0.18362.0ucrt -IC:Program Files (x86)Windows Kits10include10.0.18362.0shared -IC:Program Files (x86)Windows Kits10include10.0.18362.0um -IC:Program Files (x86)Windows Kits10include10.0.18362.0winrt -IC:Program Files (x86)Windows Kits10include10.0.18362.0cppwinrt /Tc.sqlite3.c /Fobuildtemp.win-amd64-3.9Release.sqlite3.obj
sqlite3.c
.sqlite3.c(24335): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
C:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsMSVC14.28.29333binHostX86x64cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DMODULE_NAME="sqlcipher3.dbapi2" -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS3_PARENTHESIS=1 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_JSON1=1 -DSQLITE_ENABLE_LOAD_EXTENSION=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_STAT4=1 -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1 -DSQLITE_HAS_CODEC=1 -DSQLITE_SOUNDEX=1 -DSQLITE_USE_URI=1 -DSQLITE_TEMP_STORE=2 -DSQLITE_MAX_VARIABLE_NUMBER=250000 -DSQLITE_DEFAULT_PAGE_SIZE=4096 -DSQLITE_DEFAULT_CACHE_SIZE=-8000 -Dinline=__inline -I. -IC:OpenSSL-Win64include -IC:Pythoninclude -IC:Pythoninclude -IC:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsMSVC14.28.29333include -IC:Program Files (x86)Windows KitsNETFXSDK4.8includeum -IC:Program Files (x86)Windows Kits10include10.0.18362.0ucrt -IC:Program Files (x86)Windows Kits10include10.0.18362.0shared -IC:Program Files (x86)Windows Kits10include10.0.18362.0um -IC:Program Files (x86)Windows Kits10include10.0.18362.0winrt -IC:Program Files (x86)Windows Kits10include10.0.18362.0cppwinrt /Tcsrcblob.c /Fobuildtemp.win-amd64-3.9Releasesrcblob.obj
blob.c
srcblob.c(178): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(359): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(386): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(408): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(421): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(421): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(439): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(439): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(508): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(536): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(550): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(550): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(574): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(574): warning C4244: 'function': conversion from 'Py_ssize_t' to 'int', possible loss of data
srcblob.c(638): error C2017: illegal escape sequence
srcblob.c(638): error C2224: left of '.Blob' must have struct/union type
srcblob.c(638): error C2001: newline in constant
srcblob.c(638): error C2059: syntax error: 'string'
error: command 'C:Program Files (x86)Microsoft Visual Studio2019BuildToolsVCToolsMSVC14.28.29333binHostX86x64cl.exe' failed with exit code 2

这里Blob.c中的行(行638是MODULE_NAME ".Blob",(:

PyTypeObject pysqlite_BlobType = {
PyVarObject_HEAD_INIT(NULL, 0)
MODULE_NAME ".Blob",
.tp_basicsize = sizeof(pysqlite_Blob),
.tp_dealloc = (destructor)pysqlite_blob_dealloc,
.tp_as_sequence = &blob_sequence_methods,
.tp_as_mapping = &blob_mapping_methods,
.tp_flags = Py_TPFLAGS_DEFAULT,
.tp_weaklistoffset = offsetof(pysqlite_Blob, in_weakreflist),
.tp_methods = blob_methods,
};

有人能帮我继续吗?谢谢

我今天遇到了同样的问题,设置几乎完全相同。我需要做两个修改才能成功编译sqlcipher3:

  1. MODULE_NAME预编译器定义的内容设置在setup.py的第38行中。这里调用的函数quote_argument区别于Windows和其他平台。在Windows上,引号字符使用反斜杠进行转义。至少对于MSVC2019来说,这似乎是不正确的。要修复它,只需删除第35行中Windows特定的内容。

  2. OpenSSL的库名称在1.1.0版本中发生了更改。如果您使用的是较新的版本,则可能需要将库名称从libeay32.lib更改为libcrypto.lib,或者更改系统上调用的库的名称(第132行(。此外,您可能需要设置环境变量OPENSSL_CONF,以帮助构建脚本在系统上查找OpenSSL。

有了这两个小修改,构建过程运行良好。

最新更新