为了账号安全,请及时绑定邮箱和手机立即绑定

构建 Rust 静态库以在 CGO 中使用

构建 Rust 静态库以在 CGO 中使用

Go
largeQ 2022-10-24 16:52:28
我正在尝试将我的 Rust crate 构建为静态库,以便通过 FFI 在 Golang 中进一步使用它。到目前为止,尝试了许多关于链接的不同方法,但undefined reference最终 go 二进制文件仍然存在错误:    /usr/bin/ld: ./lib/libsolana_mint.a(nix-6da6fd938c826d01.nix.e161731d-cgu.5.rcgu.o): in function `nix::mqueue::mq_open':nix.e161731d-cgu.5:(.text._ZN3nix6mqueue7mq_open17hd889faf637ea61f3E+0xd): undefined reference to `mq_open'/usr/bin/ld: nix.e161731d-cgu.5:(.text._ZN3nix6mqueue7mq_open17hd889faf637ea61f3E+0x1e): undefined reference to `mq_open'/usr/bin/ld: ./lib/libsolana_mint.a(nix-6da6fd938c826d01.nix.e161731d-cgu.5.rcgu.o): in function `nix::mqueue::mq_unlink':nix.e161731d-cgu.5:(.text._ZN3nix6mqueue9mq_unlink17hc51e2d94961b863cE+0x6): undefined reference to `mq_unlink'/usr/bin/ld: ./lib/libsolana_mint.a(nix-6da6fd938c826d01.nix.e161731d-cgu.5.rcgu.o): in function `nix::mqueue::mq_close':nix.e161731d-cgu.5:(.text._ZN3nix6mqueue8mq_close17h53f48d4def20adadE+0x3): undefined reference to `mq_close'所有错误都引用了来自依赖项的一堆 Rust crate,例如nix,solana_sdk这是我的 Dockerfile,我从中构建它:# syntax=docker/dockerfile:1FROM rust:1.58 as buildRUN apt-get updateRUN apt-get install -y libudev-dev && apt-get install -y pkg-configWORKDIR /solanaCOPY lib/solana_mint ./solana_mintWORKDIR /solana/solana_mintRUN RUSTFLAGS='-C target-feature=+crt-static' cargo build --target x86_64-unknown-linux-gnu --releaseFROM golang:1.17WORKDIR /cardforgeCOPY --from=build /solana/solana_mint/target/release/libsolana_mint.a ./lib/COPY ./lib/solana_mint.h ./lib/COPY go.mod ./COPY go.sum ./RUN go mod downloadCOPY controllers ./controllersCOPY models ./modelsCOPY *.go ./RUN go build main.goEXPOSE 8080CMD [ "RUST_LOG=trace ./main" ]将不胜感激任何信息,因为cgo高级示例的资源不多,除了普通的 hello-workd 与单函数绑定
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

问题在于 CGO 的正确标志。这就是 main.go 中 CGO 的标头现在的样子


/*

#cgo LDFLAGS: ./lib/libsolana_mint.a -ldl -ludev -lrt -lm

#include "./lib/solana_mint.h"

*/

import "C"

添加-ludev -rt -lm解决了链接器和 Docker 映像编译的所有错误。


奇怪的是,这一刻在任何 FFI 文档中都没有减轻


查看完整回答
反对 回复 2022-10-24
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信