Golang 静态库的编译 & 使用
使用场景
- 我开发第一个库,给第三方使用,但是不想直接提供源代码给他们,就可以直接编译一个静态文件给他们使用
Demo
环境介绍
- 系统为 mac os x
$GOPATH
为/Users/qinhan/go
准备工作
首先我在
$GOPATH/src
下建立一个名为test
的目录该目录下只有一个名为
test.go
的文件,只有一个名为Show
的函数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17➜ test echo $GOPATH
/Users/qinhan/go
➜ test pwd
/Users/qinhan/go/src/test
➜ test ls
test.go
➜ test cat test.go
package test
import "fmt"
func Show() {
fmt.Println("hello!")
}然后我在
$GOPATH
下有一个main.go
主函数调用了
$GOPATH/src/test/test.go
中的Show
函数
1 | ➜ src echo $GOPATH |
- 运行
1
2➜ src go run ./main.go
hello!
编译静态库test.a
- 接下来我们进入
$GOPATH/src
目录下 - 将
test
库编译成静态库
1 | go install test |
- 这样会在
$GOPATH/pkg
的相应目录下生成静态库 - 因为我的平台为 mac, 因此路径为
$GOPATH/pkg/darwin_amd64/test.a
- win 平台路径一般为
$GOPATH\pkg\windows_amd64\test.a
编译main.go
- 进入main.go所在目录,编译main.go:
1 | ➜ src pwd |
- 可以看到生成了名字
main.o
的目标文件
链接main.o
-L
选项指定了静态库test.a
的路径,即$GOPATH/pkg/darwin_amd64
目录,链接成功后会生成相应的可执行文件main
1 | ➜ src pwd |
运行main
1 | ➜ src pwd |
- 现在,就算把
$GOPATH/src/test
目录删除,再次编译链接main.go
,也能正确生成main
- 但是,如果删除了静态库
test.a
, 就不能编译main.go