golang 静态库的编译与使用

本文介绍了如何在Mac/Linux环境下使用go tool编译静态库。通过创建hello工程,包含foo模块和cmd目录,然后编译foo模块为静态库,最后链接库文件和main函数生成可执行文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

go tool 静态库编译与使用

可能是用的不多,搜了一圈例子很少,大多是那个在 windows 上使用的 demo 的例子,凑个热闹贡献一个 mac / linux 通用的例子吧,并没那么复杂

创建 hello 工程

首选创建一个 hello 工程,包含了 foocmd 两个目录分别存放 foo.go 模块和 main.go

  • hello/go.mod
module hello
go 1.14
  • hello/foo/foo.go
package foo

import "fmt"

func Bar() {
	fmt.Println("foobar.")
}

  • hello/cmd/main.go
package main

import "hello/foo"

func main() {
	foo.Bar()
}

编译

工程目录 /tmp/hello 首先把 foo 模块编译成 foo.a

$> cd /tmp/hello
$> go tool compile -pack foo/foo.go 
$> ls -l
drwxr-xr-x   3 liangc  wheel     96  4 24 16:22 cmd/
drwxr-xr-x   3 liangc  wheel     96  4 24 17:03 foo/
-rw-r--r--   1 liangc  wheel  13926  4 24 17:17 foo.a
-rw-r--r--   1 liangc  wheel     22  4 24 16:19 go.mod

可以看到我们已经得到了想要的 foo.a,接下来编译 main 函数

$> go tool compile -I /tmp/ cmd/main.go
$> ls -l
drwxr-xr-x   3 liangc  wheel     96  4 24 16:22 cmd/
drwxr-xr-x   3 liangc  wheel     96  4 24 17:03 foo/
-rw-r--r--   1 liangc  wheel  13926  4 24 17:17 foo.a
-rw-r--r--   1 liangc  wheel     22  4 24 16:19 go.mod
-rw-r--r--   1 liangc  wheel   4944  4 24 17:19 main.o

参数中的 -I 是告诉编译器在哪个目录加载依赖库,接下来链接 main.ofoo.a 得到 hello ,并执行

$> go tool link -o hello -L /tmp/ main.o
$> ls -l 
drwxr-xr-x   3 liangc  wheel       96  4 24 16:22 cmd/
drwxr-xr-x   3 liangc  wheel       96  4 24 17:03 foo/
-rw-r--r--   1 liangc  wheel    13926  4 24 17:17 foo.a
-rw-r--r--   1 liangc  wheel       22  4 24 16:19 go.mod
-rwxr-xr-x   1 liangc  wheel  2165864  4 24 17:22 hello*
-rw-r--r--   1 liangc  wheel     4944  4 24 17:19 main.o
$> ./hello
foobar.

大功告成,link 参数中的 -L 也是指定依赖库的目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值