Rust 编译柴油 sqlite 生成的列
Rust Compilation dieselrs sqlite3 Generated-Colums
背景
我需要在基于 arm 的计算机 (Jetson Nano) 中 运行 一个二进制文件,我正在编译并 运行 没有任何问题地编译它,直到我的团队决定在 sqlite3 一个在版本 3.31.0 中实现的功能,但是所述计算机的 Ubuntu 图像 运行 具有以前的开发版本并导致以下使用 Dieselrs 库的崩溃
thread 'main' panicked at 'called `Result::unwrap()` on an
`Err` value: DatabaseError(__Unknown, "malformed database schema
(group) - near \"as\": syntax error")', src/common_queries.rs:182:35
(我们处理解包,但我删除了它以查看真实消息)
我知道这是一个版本问题,因为显示的消息与 sqlite3 文档中所述的消息相似
.... If an earlier version of SQLite attempts to read a
database file that contains a generated column in its schema,
then that earlier version will perceive the generated column syntax
as an error and will report that the database schema is corrupt.
并且因为在装有 sqlite3 版本 3.34 的 x86 计算机中可以正常工作。
已经尝试过的
更新库
我已经尝试从官方网页和 运行 sudo make install
下载 SQLite 的 3.36 版,但这并没有在 /usr/include
中创建库,但不知何故它仍然编译它并且它仍然显示相同的错误。 (也许它知道新图书馆在哪里,但奇怪的是尽管如此它仍然不起作用)。
更改数据库架构
我能想出的最简单的解决方案是更改模式并将生成的列存储为将使用 after update trigger
生成的新列,但这意味着数据库将不再是以普通形式。
交叉编译
由于它在 x86 机器上运行,我尝试以该体系结构为目标,采用导致以下消息的不同方法
linking with `aarch64-linux-gnu-ld` failed: exit status: 1
....
....
....
aarch64-linux-gnu-ld: cannot find -lsqlite3
aarch64-linux-gnu-ld: cannot find -lgcc_s
我猜这是因为它们都没有出现在 /usr/aarch64-linux-gnu/include/
但安装 libsqlite3-dev 并不能解决问题。
关于如何解决这个问题有什么想法吗?
尝试将 libsqlite3-sys = { version = "0.22.0", features = ["bundled"]}
添加到您的 Cargo.toml
。这会强制 libsqlite3
从源代码为正确的目标构建。这使用最新版本的 sqlite。
有关详细信息,请参阅 libsqlite3-sys
的 documentation。
背景
我需要在基于 arm 的计算机 (Jetson Nano) 中 运行 一个二进制文件,我正在编译并 运行 没有任何问题地编译它,直到我的团队决定在 sqlite3 一个在版本 3.31.0 中实现的功能,但是所述计算机的 Ubuntu 图像 运行 具有以前的开发版本并导致以下使用 Dieselrs 库的崩溃
thread 'main' panicked at 'called `Result::unwrap()` on an
`Err` value: DatabaseError(__Unknown, "malformed database schema
(group) - near \"as\": syntax error")', src/common_queries.rs:182:35
(我们处理解包,但我删除了它以查看真实消息)
我知道这是一个版本问题,因为显示的消息与 sqlite3 文档中所述的消息相似
.... If an earlier version of SQLite attempts to read a
database file that contains a generated column in its schema,
then that earlier version will perceive the generated column syntax
as an error and will report that the database schema is corrupt.
并且因为在装有 sqlite3 版本 3.34 的 x86 计算机中可以正常工作。
已经尝试过的
更新库
我已经尝试从官方网页和 运行 sudo make install
下载 SQLite 的 3.36 版,但这并没有在 /usr/include
中创建库,但不知何故它仍然编译它并且它仍然显示相同的错误。 (也许它知道新图书馆在哪里,但奇怪的是尽管如此它仍然不起作用)。
更改数据库架构
我能想出的最简单的解决方案是更改模式并将生成的列存储为将使用 after update trigger
生成的新列,但这意味着数据库将不再是以普通形式。
交叉编译
由于它在 x86 机器上运行,我尝试以该体系结构为目标,采用导致以下消息的不同方法
linking with `aarch64-linux-gnu-ld` failed: exit status: 1
....
....
....
aarch64-linux-gnu-ld: cannot find -lsqlite3
aarch64-linux-gnu-ld: cannot find -lgcc_s
我猜这是因为它们都没有出现在 /usr/aarch64-linux-gnu/include/
但安装 libsqlite3-dev 并不能解决问题。
关于如何解决这个问题有什么想法吗?
尝试将 libsqlite3-sys = { version = "0.22.0", features = ["bundled"]}
添加到您的 Cargo.toml
。这会强制 libsqlite3
从源代码为正确的目标构建。这使用最新版本的 sqlite。
有关详细信息,请参阅 libsqlite3-sys
的 documentation。