我需要创建一个静态库才能在docker容器中运行它。
使用go run main.go
运行我的代码时,它运行得很顺利。
但是,当我尝试以STATIC程序的形式构建代码时,事情变得复杂了(将所有动态依赖项重新编译为独立的lib,包括共享库)。
我的应用程序依赖于/usr/local/lib/librandom_c.so
中的C共享库,而我的应用程序源代码位于$GOPATH/src/github.com/<user>/myapp
中。
在构建应用程序而没有尝试静态链接共享库时,它可以正常运行而不会抱怨:
go build -a -o hello .
...但是随后docker抱怨共享库不存在(使用FROM从头开始)。
到目前为止,我已经尝试了多种组合来静态构建我的应用程序:
go build -a -ldflags '-linkmode "external" -extldflags "-static"' -o hello .
出现错误:
cannot find -lrandom_c
如何静态链接我的库?
答案 0 :(得分:1)
CL 26492表明它可能和这样做一样简单(可能在2020年第一季度Go 1.14,尚未确认):
go build -static
这将封装以下魔法咒语:
-tags netgo -ldflags '-H=windowsgui -extldflags "-static"'
-tags netgo -ldflags '-extldflags "-static"'
-ldflags '-s -extldflags "-sectcreate __TEXT __info_plist Info.plist"'
-ldflags -s