Golang 静态库的编译和使用

Jackey Golang 4,929 次浏览 没有评论

本文主要介绍go语言静态库的编译和使用方法,以windows平台为例,linux平台步骤一样,具体环境如下:

  1. >echo %GOPATH%
  2. E:\share\git\go_practice\
  3.  
  4. >echo %GOROOT%
  5. C:\Go\
  6.  
  7. >tree /F %GOPATH%\src
  8. 卷 work 的文件夹 PATH 列表
  9. 卷序列号为 0009-D8C8
  10. E:\SHARE\GIT\GO_PRACTICE\SRC
  11. │ main.go
  12. └─demo
  13. demo.go

在%GOPATH%\src目录,有demo包和使用demo包的应用程序main.go,main.go代码如下:

  1. package main
  2.  
  3. import "demo"
  4.  
  5. func main() {
  6. demo.Demo()
  7. }

demo包中的demo.go代码如下:

  1. package demo
  2.  
  3. import "fmt"
  4.  
  5. func Demo() {
  6. fmt.Println("call demo ...")
  7. }

由于demo.go是在%GOPATH%\src目录下的一个包,main.go在import该包后,可以直接使用,运行main.go:

  1. >go run main.go
  2. call demo ...

现在,需要将demo.go编译成静态库demo.a,不提供demo.go的源代码,让main.go也能正常编译运行,详细步骤如下:

编译静态库demo.a

  1. go install demo

在命令行运行go install demo命令,会在%GOPATH%目录下生相应的静态库文件demo.a(windows平台一般在%GOPATH%\src\pkg\windows_amd64目录)。

编译main.go

进入main.go所在目录,编译main.go:

  1. >go tool compile -I E:\share\git\go_practice\pkg\windows_amd64 main.go

-I选项指定了demo包的安装路径,供main.go导入使用,即E:\share\git\go_practice\pkg\windows_amd64目录,编译成功后会生成相应的目标文件main.o。

链接main.o

  1. >go tool link -o main.exe -L E:\share\git\go_practice\pkg\windows_amd64 main.o

-L选项指定了静态库demo.a的路径,即E:\share\git\go_practice\pkg\windows_amd64目录,链接成功后会生成相应的可执行文件main.exe。

运行main.exe

  1. >main.exe
  2. call demo ...

现在,就算把demo目录删除,再次编译链接main.go,也能正确生成main.exe:

  1. >go tool compile -I E:\share\git\go_practice\pkg\windows_amd64 main.go
  2.  
  3. >go tool link -o main.exe -L E:\share\git\go_practice\pkg\windows_amd64 main.o
  4.  
  5. >main.exe
  6. call demo ...

但是,如果删除了静态库demo.a,就不能编译main.go,如下:

  1. >go tool compile -I E:\share\git\go_practice\pkg\windows_amd64 main.go
  2. main.go:3: can't find import: "demo"

以上就是go语言静态库的编译和使用方法,下次介绍动态库的编译和使用方法。

本文来自:简书

原文地址:https://www.jianshu.com/p/b3fb41d7c33f

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Go