主.如下所示:
package main
func main() {
println("hello world")
}
Makefile文件为:
flags=-X main.version=1.5.0
build:
go build -ldflags "$(flags)" -o main main.go
然后我运行make
,得到主文件。
运行./main -v
后,我得到:
hello world
为什么不显示1.5.0
?
go版本是go version go1.18 darwin/arm64
,当我运行go version -m main
时,我得到:
main: go1.18
path command-line-arguments
build -compiler=gc
build -ldflags="-X main.version=1.5.0"
build CGO_ENABLED=1
build CGO_CFLAGS=
build CGO_CPPFLAGS=
build CGO_CXXFLAGS=
build CGO_LDFLAGS=
build GOARCH=arm64
build GOOS=darwin
我对ldflags
有一个误解。它的工作原理如下:
第一个
2条答案
按热度按时间wnvonmuf1#
你用ldflags(
version
)设置的变量必须在包级别声明。你必须自己实现对-v
的处理。第一个
68bkxrlz2#
如果构建了一个包(如
go build github.com/xxx/yyy/zzz
),则必须相应地添加符号前缀。例如:B.T.W.另一种确定使用哪个符号ID的方法是为要查找的变量运行
nm
和grep。