从64位Arch Linux编译Rust程序,为树莓派`armv7-unknown-linux-gnueabihf`架构生成可执行文件。

3
我想从我的笔记本电脑为树莓派编译一个Rust程序。我在升级树莓派上的C版本时遇到了问题,无法安装Rust以从那里进行编译。
我按照this的教程进行交叉编译Rust来支持树莓派。这种方法可以顺利编译简单的程序,但我想要编译的程序使用了sqlite和openssl,这就是我遇到问题的地方。
我已经安装了lib32-dbuslib32-openssllib32-sqlite。执行export OPENSSL_LIB_DIR=/usr/lib32export OPENSSL_INCLUDE_DIR=/usr/include/openssl-1.0可以解决openssl的问题,但连接器仍然找不到32位版本的sqlite库并显示以下错误:
$ PKG_CONFIG_ALLOW_CROSS=1 cargo build --target armv7-unknown-linux-gnueabihf

...

note: /usr/lib/libsqlite3.so: file not recognized: file format not recognized

完整错误信息请点击这里

是否存在可以设置的SQLITE_LIB_DIR环境变量?如果没有,我该如何将链接器指向正确的版本?谢谢。

编辑:我已经下载并交叉编译了适用于 ARM Linux 的 libsqlite3 库。现在我只需要知道如何将链接器指向 ARM 版本即可。


1
你正在链接本地的 libsqlite 库。你可以自己交叉编译 libsqlite3,或使用预编译版本。 - hellow
一旦我交叉编译完成,我该如何指定链接器? - BaleineBleue
在C语言中,通常使用--sysroot来指定链接器。C编译器会为您调用链接器。sysroot包含了目标所需的所有头文件和库。我知道Rust重新发明了轮子。不确定如何在Rust中实现相同的功能。当我尝试为ARM Rust构建新的Firefox Geckodriver时,Rust和Cargo破坏了构建过程。祝你好运。 - jww
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接