【发布时间】:2022-01-23 04:50:26
【问题描述】:
我的操作系统是 Kali,运行 GLIBC_2.32。我需要为运行 GLIBC_2.28 的 debian 10 系统构建 CGO 应用程序。
如果我go build用动态链接,在debian系统上不能运行,显示GLIBC不匹配:
version `GLIBC_2.29` not found
version `GLIBCXX_3.4.29` not found
version `GLIBC_2.32` not found
所以我尝试了静态链接:CGO_LDFLAGS='-static' go build。一个 gui 库使用 OpenGL,它显示错误:
# github.com/go-gl/gl/v3.2-core/gl
/usr/bin/ld: cannot find -lGL
找了一会发现libGL和gpu驱动有关,不能静态链接。
然后我尝试通过以下方式动态链接 libGL.so 和静态链接其他库:
CGO_LDFLAGS='-L/usr/lib/x86_64-linux-gnu -Bdynamic -lGL -static' go build
但同样的错误:“找不到 -lGL”
我不想用 docker,太重了。而且我认为从 debian 10 升级到 11 并不能解决问题,将来可能会有其他一些客户端运行不同的操作系统。最好的解决方案是什么?
【问题讨论】:
-
即使是静态链接的,glibc 也需要在宿主系统上匹配(这通常是你不应该静态链接 glibc 的原因)。有一些 c 库,如 musl,用于静态链接。