golang语言 无源码使用静态库(.a文件)手动静态编译链接程序

您所在的位置:网站首页 golang调用c库 golang语言 无源码使用静态库(.a文件)手动静态编译链接程序

golang语言 无源码使用静态库(.a文件)手动静态编译链接程序

2023-07-13 13:03| 来源: 网络整理| 查看: 265

使用场景

go语言默认全部从源码静态编译,如果没有源码,只有静态库.a文件时如何进行编译呢? 假如你不想暴露源码给别人,别人又不想使用动态库,那么这个就派得上用场了。

文件 hello.go (假定为需要保护的源码) package hello import "log" func Hello() { log.Println("hello") } 文件 main.go (别人调用hello的示例代码) package main import "hello" func main() { hello.Hello() }

我们对需要保护的源码进行生成.a文件的静态库,然后再分发给其他人使用。

#编译hello.go文件(代码无第三方依赖),可用 -o 参数将静态库输出到指定路径(默认当前路径)。 go tool compile -o ./lib/hello.o hello.go #有第三方依赖,用 -I 参数指定依赖的静态库路径(默认仅只在[$GOROOT/pkg/$GOOS_$GOARCH]搜索) go tool compile -o ./lib/hello.o -I ./lib/ hello.go

别人拿到我的静态库怎么用呢?

#例如别人把我的.a静态库文件放到项目根路径下的lib内,那么他可以这样编译他的go文件 go tool compile -o main.o -I ./lib/ main.go #最后是链接成可执行文件(-L 指定依赖静态库的路径) go tool link -o main.exe -L ./lib/ main.o #当然还可以使用 -w -s 缩小体积 go tool link -o main.exe -w -s -L ./lib/ main.o

你学会了吗?



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3