golang的静态链接和动态链接

Go语言在默认情况下是静态链接的
有一些库可能会导致动态链接
这时候如果你确实需要静态链接,那么可以增加 -ldflags=”-extldflags –static” 参数来进行静态链接,即这个命令:
go build -ldflags=”-extldflags –static”

还存在一些第三方库,因调用了一些 glibc 中不支持静态链接的函数,而导致无法静态链接:
对于这类情况,如果坚持一定要静态链接,那么可以弃用 glibc 库,改用 musl libc 库。



如果你使用的操作系统是 Debian / Ubuntu ,那么可以运行如下命令安装 musl libc 库:



sudo apt-get install musl-dev musl-tools



然后使用 musl libc 库来静态链接,命令是:



CC=musl-gcc go build -tags musl -ldflags=”-extldflags –static”



于是,静态链接成功。



比如librdkafka
https://blog.csdn.net/yjf_victor/article/details/119961863



https://www.musl-libc.org/



编译librdkafka 的时候可以使用此方法
librdkafka 多个topic 用同一个groupid,分开多个go routine 如果有失败的,会卡死其它的线程
建议用一个协程一个groupid消费多个topic或者每一个消费的goroutine的groupid都不一样


Category golang