golang使用静态文件(.a文件)进行编译

程序的一般过程:编辑、编译、链接、运行。由于golang的一个项目源码都是开源的,我们很少去关心编译、链接的问题。如果在一个项目中使用了非开源的第三方库,此时怎么打包出来一个可执行的exe程序?

golang使用静态文件编译

使用go tool compile

golang使用静态文件链接

使用go tool link

//staticpkg/print.go
package staticpkg

import "fmt"

func Hello() {
    fmt.Println("hello")
}

//运行 go install 会生成对应的.a文件

//修改print.go文件,去掉函数实现,
//main/main.go
package main

import (
    "staticpkg"
)

func main() {
    staticpkg.Hello()
}

//使用tool的compile命令编译当前项目
go tool compile -I $GOPATH/windows_amd64 main.go 
//会生成一个main.o文件

//使用tool的link命令生成可执行文件
go tool link -o main.exe -L $GOPATH/windows_amd64 main.go
//会生成一个main.exe程序,直接运行会输出hello

//如果直接go run main.go此时没有任何输出

使用静态文件(.a文件)进行编译和链接时,只需要有对应的.a文件即可。但是.a文件是无法查看到对应包中的一些定义的,如果要使用.a文件进行开发,还需要一份对应的声明文件。

https://github.com/golangaccount/exporthead是一个简单的导出go package声明的项目,里面移除了函数的实现细节和type或interface中的非导出item

猜你喜欢

转载自www.cnblogs.com/zp900704/p/11907504.html