go语言静态库的编译和使用方法

 更新时间:2020年05月19日 08:47:20   作者:俊采LEo  
这篇文章主要介绍了go语言静态库的编译和使用方法,本文以windows平台为例,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

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

>echo %GOPATH%
E:\share\git\go_practice\

>echo %GOROOT%
C:\Go\

>tree /F %GOPATH%\src
卷 work 的文件夹 PATH 列表
卷序列号为 0009-D8C8
E:\SHARE\GIT\GO_PRACTICE\SRC
│ main.go
│
└─demo
    demo.go

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

package main
import "demo"
func main() {
  demo.Demo()
}

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

package demo

import "fmt"

func Demo() {
  fmt.Println("call demo ...")
}

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

>go run main.go
call demo ...

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

1 编译静态库demo.a

>go install demo

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

2 编译main.go

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

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

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

3 链接main.o

>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\win
dows_amd64目录,链接成功后会生成相应的可执行文件main.exe。

4 运行main.exe

>main.exe
call demo ...

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

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

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

>main.exe
call demo ...

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

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

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

总结

到此这篇关于go语言静态库的编译和使用方法的文章就介绍到这了,更多相关go语言静态库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在Mac中搭建go语言开发环境的操作步骤

    在Mac中搭建go语言开发环境的操作步骤

    go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发。下面介绍在Mac中golang的开发环境配置。有需要的可以参考借鉴。
    2016-08-08
  • golang DNS服务器的简单实现操作

    golang DNS服务器的简单实现操作

    这篇文章主要介绍了golang DNS服务器的简单实现操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 使用Golang打印特定的日期时间的操作

    使用Golang打印特定的日期时间的操作

    这篇文章主要给大家详细介绍了如何使用Golang打印特定的日期时间的操作,文中有详细的代码示例,具有一定的参考价值,需要的朋友可以参考下
    2023-07-07
  • 深入理解 Go 中的字符串

    深入理解 Go 中的字符串

    这篇文章主要介绍了深入理解 Go 中的字符串,在编程语言中,字符串发挥着重要的角色。字符串背后的数据结构一般有两种类型,一种在编译时指定长度不能修改,一种具有动态的长度可以修改,下文更多相关资料需要的小伙伴可以参考一下
    2022-05-05
  • golang新手不注意可能会出现的一些小问题

    golang新手不注意可能会出现的一些小问题

    最近在学习golang,发现了一些新手们需要注意的小问题,下面这篇文章主要给大家介绍了关于golang新手不注意可能会出现的一些小问题,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • 详解Golang中的通道机制与应用

    详解Golang中的通道机制与应用

    这篇文章主要来和大家一起深入探讨了Go语言中通道(Channel)的各个方面,文章详细解析了通道的类型、操作方法以及垃圾回收机制,有需要的可以了解下
    2023-10-10
  • 解决Golang 中使用WaitGroup的那点坑

    解决Golang 中使用WaitGroup的那点坑

    这篇文章主要介绍了解决Golang 中使用WaitGroup的那点坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Golang实现单链表的示例代码

    Golang实现单链表的示例代码

    本文主要介绍了Golang实现单链表的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Go语言中io.Reader和io.Writer的详解与实现

    Go语言中io.Reader和io.Writer的详解与实现

    在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心。在使用Go语言的过程中,无论你是实现web应用程序,还是控制台输入输出,又或者是网络操作,不可避免的会遇到IO操作,使用到io.Reader和io.Writer接口。下面来详细看看。
    2016-09-09
  • 解析go语言调用约定多返回值实现原理

    解析go语言调用约定多返回值实现原理

    这篇文章主要为大家介绍了解析go语言调用约定多返回值实现原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论