成人一对一视频交友

如何用cgo分发库?

elbert
elbert

有一个由Rust编写的库提供了调用C ABI的方法。我认为这个库很有趣,所以我试着为它写一个绑定:

https://github.com/CoolSpring8/go-lolhtml

(问题还很多,也没有推广的意思,只是考虑问题的具体情况来更好的理解)

问题来了。虽然go build时指定CGO_ENABLED=1可以让CC参数指定的编译器编译工作目录中的C/C源文件,但是这个库需要通过调用cargo来编译。

我在开发过程中采用的方案是使用carGobuild-release提前获取静态库或者动态库,然后在go文件的头部指定如下注释:

# CGO CFLAG :-I $ { SRCDIR }/lol-html/c-API/include

# CGO LDFLAG :-L $ { SRCDIR }/lol-html/c-API/target/release-llolhtml

但是,推送至GitHub后,在尝试创建新项目并引用导入路径编写演示时,发现了问题:

在启用go mod的情况下,go get之后(go get不会下载git子模块是另一个问题,很好解决),它所依赖的Rust库呢?

cd到$GOPATH/pkg/mod/github.com/.制造等等。修改文件夹内容后,模块的总和会改变,不会被使用。

总而言之:

cgo \

非主包(发布无法预编译二进制方案)\

没有正式的库分发(像大多数绑定一样,用户在用包管理器安装了相应的包后,不能调用系统动态库,比如ffmpeg的绑定)

Go模块(您不能先克隆git,然后进行最后一次go安装。所以好像要用go模块的话,只能提前把从属Rust库安装成动态库?(

看了网上能搜到的信息,解决不了我的问题。我觉得困难相撞了,所以纠结.

elbert
品牌