I need to create a static library to run it in a docker container. When running my code with go run main.go it just runs smoothly. However, things get complicated when I try to build my code as a static program (re-compile all dynamic dependencies into a standalone lib, including shared libraries).
My app depends on a C shared library located in my /usr/local/lib/librandom_c.so, while my app source code is located in $GOPATH/src/github.com/<user>/myapp.
When I build the app without trying to statically link the shared library, it works without complaining:
go build -a -o hello .
...but then docker complains that the shared library does not exist (using from scratch).
So far I have tried many combinations to statically build my app:
go build -a -ldflags '-linkmode "external" -extldflags "-static"' -o hello .
gives an error:
cannot find -lrandom_c
How do I statically link my lib?
CL 26492 shows that it might be as simple (possible for Go 1.14 Q1 2020, not confirmed yet) as to do:
go build -static
That would encapsulate the magic incantations of:
-tags netgo -ldflags '-H=windowsgui -extldflags "-static"'-tags netgo -ldflags '-extldflags "-static"'-ldflags '-s -extldflags "-sectcreate __TEXT __info_plist Info.plist"'-ldflags -sIf you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With