Ubuntu升级后运行presto遇__pow_finite未定义符号错误求助
解决Ubuntu升级后presto运行
__pow_finite未定义符号问题 一、查看libpresto.so编译所用的CLANG版本
如果找不到.comment日志文件,可通过以下方式尝试获取版本信息:
- 用
readelf检查二进制的注释段:
多数编译器会在此段留存版本标识,包括CLANG的版本信息。readelf -p .comment /Softwares/presto/lib/libpresto.so - 检查编译临时文件:若presto编译后未清理临时文件,可进入源码目录的
build或obj文件夹,对其中的.o目标文件执行上述readelf命令,同样能提取编译版本。 - 推断系统默认版本:由于你是在Ubuntu20.04环境编译的该软件,而Ubuntu20.04默认CLANG版本为9,大概率当时使用的就是这个版本。
二、版本低于10时的处理方案
是的,需要先升级CLANG到10及以上版本,再重新编译presto,步骤如下:
- 安装高版本CLANG:
sudo apt update sudo apt install clang-10 # 可选:将clang-10设为默认编译器 sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-10 100 sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-10 100 - 重新编译presto:
进入presto源码目录,先清理旧编译产物:make clean # 若未设置默认编译器,手动指定clang版本 CC=clang-10 CXX=clang++-10 make # 已设默认则直接执行 make - 更新库文件:
编译完成后,将新生成的libpresto.so替换至/Softwares/presto/lib/目录,或执行make install完成安装。
补充:
__pow_finite未定义问题确实与低版本CLANG有关,CLANG 10及以上修复了该符号的链接问题。Ubuntu22.04的glibc版本更高,对符号依赖更严格,因此旧版本编译的库会出现兼容性报错。
内容的提问来源于stack exchange,提问作者Py-ser
相关产品推荐
相关产品推荐

