sentriz / gonic

music streaming server / free-software subsonic server API implementation
ircs://irc.libera.chat/#gonic
GNU General Public License v3.0
1.49k stars 105 forks source link

Possibility for taglib static builds #511

Open xbt573 opened 3 weeks ago

xbt573 commented 3 weeks ago

gonic version: v0.16.4 docker tag: latest Actually this is irrelevant to issue, but nevermind.

  1. Building go-sqlite3 statically is very easy, just pass -ldflags '-linkmode external -extldflags "-static"' to go build

  2. taglib requires static rebuild and some code changes, but nothing very hard Firstly we need to build taglib as static library: pass -DBUILD_SHARED_LIBS=OFF to cmake (this is confusing, but disabling shared libraries enables static :/) Static zlib is also needed, which is not always bundled with system package (on alpine use zlib-static) Needed code change is at https://github.com/sentriz/audiotags/blob/master/audiotags.go#L25: add zlib to pkg-config

    --- a/audiotags.go
    +++ b/audiotags.go
    @@ -22,7 +22,7 @@
    package audiotags
    
    /*
    -#cgo pkg-config: taglib
    +#cgo pkg-config: taglib zlib
    #cgo LDFLAGS: -lstdc++
    #include "audiotags.h"
    #include <stdlib.h>

Final build command is:

go build -ldflags '-linkmode external -extldflags "-static"' -o gonic cmd/gonic/gonic.go

ldd shows:

/lib/ld-musl-x86_64.so.1: gonic: Not a valid dynamic program

(whole process was made in alpine docker image)

I didn't send PR because this is mostly untested (at least i could build it statically)