Ubuntu 20.04运行go-geos包时出现GLIBC_2.34未找到错误
解决方案
问题1:Ubuntu 20.04 上 pkg-config 找不到 geos 包
你提到两台机器都装了libgeos库,但大概率只装了运行时库,缺少开发包和pkg-config配置文件:
- 先安装geos开发包:
sudo apt update && sudo apt install libgeos-dev - 安装完成后,查找geos.pc的位置:
通常路径是find /usr -name geos.pc/usr/lib/x86_64-linux-gnu/pkgconfig/geos.pc - 将该路径临时加入PKG_CONFIG_PATH:
若要永久生效,把上述命令添加到export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/:$PKG_CONFIG_PATH~/.bashrc或~/.profile文件末尾,执行source ~/.bashrc生效 - 验证配置:
有输出则说明配置成功,此时可以在Ubuntu20.04上直接编译你的Go项目,生成的二进制会基于系统的GLIBC 2.31,自然能在本机运行。pkg-config --cflags geos && pkg-config --libs geos
问题2:跨系统编译导致的GLIBC版本不兼容
如果必须在Ubuntu22.04上编译,要生成能在20.04运行的二进制,有两种可行方案:
方案A:静态链接GLIBC和geos库
静态编译会把依赖的库打包进二进制,不依赖系统的GLIBC:
- 先在Ubuntu22.04上安装geos静态库:
sudo apt install libgeos-static - 执行静态编译命令:
注意:部分系统可能因静态链接GLIBC存在限制(比如NSS相关功能),如果编译失败,可尝试方案B。CGO_ENABLED=1 go build -ldflags '-linkmode external -extldflags "-static"' -o someName
方案B:使用musl libc替代GLIBC编译
musl是轻量的标准C库,静态编译后的二进制可跨Linux发行版运行:
- 在Ubuntu22.04上安装musl工具链:
sudo apt install musl-tools - 用musl-gcc编译项目:
生成的二进制不依赖系统GLIBC,可直接在Ubuntu20.04运行。CC=musl-gcc CGO_ENABLED=1 go build -o someName
内容的提问来源于stack exchange,提问作者pluton24
相关产品推荐
相关产品推荐

