You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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生效
  • 验证配置:
    pkg-config --cflags geos && pkg-config --libs geos
    
    有输出则说明配置成功,此时可以在Ubuntu20.04上直接编译你的Go项目,生成的二进制会基于系统的GLIBC 2.31,自然能在本机运行。

问题2:跨系统编译导致的GLIBC版本不兼容

如果必须在Ubuntu22.04上编译,要生成能在20.04运行的二进制,有两种可行方案:

方案A:静态链接GLIBC和geos库

静态编译会把依赖的库打包进二进制,不依赖系统的GLIBC:

  • 先在Ubuntu22.04上安装geos静态库:
    sudo apt install libgeos-static
    
  • 执行静态编译命令:
    CGO_ENABLED=1 go build -ldflags '-linkmode external -extldflags "-static"' -o someName
    
    注意:部分系统可能因静态链接GLIBC存在限制(比如NSS相关功能),如果编译失败,可尝试方案B。

方案B:使用musl libc替代GLIBC编译

musl是轻量的标准C库,静态编译后的二进制可跨Linux发行版运行:

  • 在Ubuntu22.04上安装musl工具链:
    sudo apt install musl-tools
    
  • 用musl-gcc编译项目:
    CC=musl-gcc CGO_ENABLED=1 go build -o someName
    
    生成的二进制不依赖系统GLIBC,可直接在Ubuntu20.04运行。

内容的提问来源于stack exchange,提问作者pluton24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:25:22