Library mode (external main) now can be enabled with build flag

This commit is contained in:
Aleksandr Sakharov 2026-01-20 21:10:52 +03:00
parent 0013b7ea7d
commit d0517dfe40
5 changed files with 48 additions and 32 deletions

View File

@ -18,12 +18,12 @@ server:
client-dynlib: client-dynlib:
mkdir -p build mkdir -p build
go build -ldflags "-X main.version=${version}" -buildmode=c-shared -o libck-client.so ./cmd/ck-client go build -ldflags "-X main.version=${version}" -buildmode=c-shared -tags=external_main -o libck-client.so ./cmd/ck-client
mv libck-client* ./build mv libck-client* ./build
server-dynlib: server-dynlib:
mkdir -p build mkdir -p build
go build -ldflags "-X main.version=${version}" -buildmode=c-shared -o libck-server.so ./cmd/ck-server go build -ldflags "-X main.version=${version}" -buildmode=c-shared -tags=external_main -o libck-server.so ./cmd/ck-server
mv libck-server* ./build mv libck-server* ./build
install: install:

View File

@ -10,8 +10,6 @@ import (
"fmt" "fmt"
"net" "net"
"os" "os"
"C"
"unsafe"
"github.com/cbeuw/Cloak/internal/common" "github.com/cbeuw/Cloak/internal/common"
@ -20,19 +18,6 @@ import (
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
//export external_main
func external_main(argc C.int, argv **C.char) {
var offset = unsafe.Sizeof(uintptr(0))
var go_argv []string
for i := 0; i < int(argc); i++ {
go_argv = append(go_argv, C.GoString(*argv))
argv = (**C.char)(unsafe.Pointer(uintptr(unsafe.Pointer(argv)) + offset))
}
os.Args = go_argv
main()
}
var version string var version string
func main() { func main() {

View File

@ -0,0 +1,23 @@
//go:build external_main
// +build external_main
package main
import (
"os"
"C"
"unsafe"
)
//export external_main
func external_main(argc C.int, argv **C.char) {
var offset = unsafe.Sizeof(uintptr(0))
var go_argv []string
for i := 0; i < int(argc); i++ {
go_argv = append(go_argv, C.GoString(*argv))
argv = (**C.char)(unsafe.Pointer(uintptr(unsafe.Pointer(argv)) + offset))
}
os.Args = go_argv
main()
}

View File

@ -9,8 +9,6 @@ import (
"os" "os"
"runtime" "runtime"
"strings" "strings"
"C"
"unsafe"
"github.com/cbeuw/Cloak/internal/common" "github.com/cbeuw/Cloak/internal/common"
"github.com/cbeuw/Cloak/internal/server" "github.com/cbeuw/Cloak/internal/server"
@ -70,19 +68,6 @@ func parseSSBindAddr(ssRemoteHost string, ssRemotePort string, ckBindAddr *[]net
return nil return nil
} }
//export external_main
func external_main(argc C.int, argv **C.char) {
var offset = unsafe.Sizeof(uintptr(0))
var go_argv []string
for i := 0; i < int(argc); i++ {
go_argv = append(go_argv, C.GoString(*argv))
argv = (**C.char)(unsafe.Pointer(uintptr(unsafe.Pointer(argv)) + offset))
}
os.Args = go_argv
main()
}
func main() { func main() {
var config string var config string

View File

@ -0,0 +1,23 @@
//go:build external_main
// +build external_main
package main
import (
"os"
"C"
"unsafe"
)
//export external_main
func external_main(argc C.int, argv **C.char) {
var offset = unsafe.Sizeof(uintptr(0))
var go_argv []string
for i := 0; i < int(argc); i++ {
go_argv = append(go_argv, C.GoString(*argv))
argv = (**C.char)(unsafe.Pointer(uintptr(unsafe.Pointer(argv)) + offset))
}
os.Args = go_argv
main()
}