【问题标题】:Compile Rust program for raspberry pi `armv7-unknown-linux-gnueabihf` from 64 bit arch linux从 64 位 arch linux 为 raspberry pi `armv7-unknown-linux-gnueabihf` 编译 Rust 程序
【发布时间】:2019-10-01 18:51:06
【问题描述】:

我想从我的笔记本电脑上为我的树莓派编译一个 Rust 程序。我在升级 pi 上的 C 版本时遇到问题,无法安装 rust 以从那里编译它。

我按照this 教程为 rpi 交叉编译 rust。我可以用这种方式编译简单的程序没有问题,但是我要编译的程序使用 sqlite 和 openssl,这就是我遇到问题的地方。

我已经安装了lib32-dbuslib32-openssllib32-sqlite。执行 export OPENSSL_LIB_DIR=/usr/lib32export 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


【解决方案1】:

你不能用 OpenSSL 的每个特性交叉编译你的 Rust 程序,因为某些版本的 OpenSSL 不支持(作为供应商的特性)这有助于交叉编译。因此,您可以使用支持此功能的 OpenSSL 版本,例如 openssl = { version = "0.10", features = ["vendored"] }

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 2016-11-13
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2011-02-11
    • 1970-01-01
    相关资源
    最近更新 更多