运行Go单元测试报错:找不到CXXABI_1.3.9版本libstdc++.so.6如何解决?
解决方法
这个报错是因为目标机器的libstdc++.so.6版本过低,缺少程序依赖的CXXABI_1.3.9版本。以下是几种可行的解决方式:
方式一:静态编译程序(推荐)
在编译机器上重新编译时,添加静态链接参数,把依赖的库打包进二进制文件,避免依赖目标机器的系统库:
go test -c -run TestChannelReportCsv -ldflags '-linkmode external -extldflags "-static"'
编译生成的mqworker.test可以直接在目标机器运行,无需额外依赖。
方式二:更新目标机器的libstdc++库
如果目标机器有root权限,可以直接更新系统的libstdc++组件:
- 对于CentOS/RHEL系统:
sudo yum install -y libstdc++-devel - 对于Debian/Ubuntu系统:
sudo apt-get install -y libstdc++6
如果系统版本过旧无法通过包管理更新,可以从编译机器上复制高版本的libstdc++.so.6文件到目标机器的/usr/local/lib目录,然后更新软链接:
# 备份原软链接 sudo mv /lib64/libstdc++.so.6 /lib64/libstdc++.so.6.bak # 创建新软链接(假设复制过来的文件是libstdc++.so.6.0.25) sudo ln -s /usr/local/lib/libstdc++.so.6.0.25 /lib64/libstdc++.so.6
方式三:临时指定库路径运行
无需修改系统库,临时设置环境变量让程序加载指定目录下的高版本libstdc++:
- 从编译机器上复制
libstdc++.so.6及对应版本的文件(比如libstdc++.so.6.0.25)到目标机器的某个目录,比如./libstdc++ - 执行以下命令运行程序:
export LD_LIBRARY_PATH=./libstdc++:$LD_LIBRARY_PATH ./mqworker.test
内容的提问来源于stack exchange,提问作者zqm
相关产品推荐
相关产品推荐

