【发布时间】:2019-10-01 18:51:06
【问题描述】:
我想从我的笔记本电脑上为我的树莓派编译一个 Rust 程序。我在升级 pi 上的 C 版本时遇到问题,无法安装 rust 以从那里编译它。
我按照this 教程为 rpi 交叉编译 rust。我可以用这种方式编译简单的程序没有问题,但是我要编译的程序使用 sqlite 和 openssl,这就是我遇到问题的地方。
我已经安装了lib32-dbus、lib32-openssl 和lib32-sqlite。执行 export OPENSSL_LIB_DIR=/usr/lib32 和 export OPENSSL_INCLUDE_DIR=/usr/include/openssl-1.0 修复了 openssl,但链接器仍然找不到 32 位版本的 sqlite lib 并退出并出现以下错误:
$ PKG_CONFIG_ALLOW_CROSS=1 cargo build --target armv7-unknown-linux-gnueabihf
...
note: /usr/lib/libsqlite3.so: file not recognized: file format not recognized
完全错误here。
我可以设置某种SQLITE_LIB_DIR env 变量吗?如果不是,我如何将链接器指向正确的版本?谢谢。
编辑:我现在已经下载并交叉编译了用于 arm linux 的 libsqlite3。现在我只需要知道如何将链接器指向 arm 版本。
【问题讨论】:
-
您正在链接本地 libsqlite。你要么自己有交叉编译器 libsqlite3,要么使用预编译的。
-
交叉编译后,如何将链接器指向它?
-
“我如何将链接器指向它...” - 在 C 语言中,您通常使用
--sysroot。 C 编译器将为您调用链接器。sysroot具有目标所需的所有头文件和库。我知道 Rust 重新发明了轮子。不知道如何在 Rust 中做同样的事情。当我尝试为 ARM Rust 和 Cargo 构建新的 Firefox Geckodriver 时,构建失败了。祝你好运。
标签: linux rust raspberry-pi cross-compiling rust-cargo