博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go语言静态库的编译和使用
阅读量:7144 次
发布时间:2019-06-29

本文共 1631 字,大约阅读时间需要 5 分钟。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leo881205/article/details/80141735

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

>echo %GOPATH%E:\share\git\go_practice\>echo %GOROOT%C:\Go\>tree /F %GOPATH%\src卷 work 的文件夹 PATH 列表卷序列号为 0009-D8C8E:\SHARE\GIT\GO_PRACTICE\SRC│  main.go│└─demo        demo.go

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

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

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

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

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

>go run main.gocall 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.execall 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.execall demo ...

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

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

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

你可能感兴趣的文章
JBoss开发者框架: JBoss技术文档中心
查看>>
【英语天天读】First Inaugural Address
查看>>
解决ASP.NET中的各种乱码问题
查看>>
博客界面终于变成了自己比较满意的感觉
查看>>
使用hibernate和struts2实现分页功能
查看>>
生成指定大小文件
查看>>
26.案例:数据准备
查看>>
VC:CFileDialog(GetNextPathName、GetFileName)
查看>>
linux与win下安装java linux下的安装方法
查看>>
在IIS8添加WCF服务支持
查看>>
(转)代码执行的效率
查看>>
第一天用MongoDB
查看>>
Linux服务器部署系列之二—MySQL篇
查看>>
STM32笔记记录3
查看>>
typedef关键字
查看>>
EntityType 'UserInfo' has no key defined. Define the key for this EntityType.
查看>>
Merge PDF File using itextsharp library
查看>>
使用微软的TFS云服务
查看>>
[已解]如何设置xib 中 ipad 的开发模式为横屏
查看>>
Repeater控件使用
查看>>