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

使用场景

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

你学会了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值