非root用户安装新版本cmake时在bootstrap步骤显示错误symbol lookup error undefined symbol

因为服务器cmake版本比较老,我非root用户尝试安装新版本cmake时在bootstrap步骤发生错误,显示symbol lookup error,我安装3.25.1或者3.24.3都有这个问题。下面是复制的错误和图片。

x-process.c.o uv-src-unix-signal.c.o uv-src-unix-stream.c.o uv-src-unix-tcp.c.o rhash-librhash-algorithms.c.o rhash-librhash-byte_order.c.o rhash-librhash-hex.c.o rhash-librhash-md5.c.o rhash-librhash-rhash.c.o rhash-librhash-sha1.c.o rhash-librhash-sha256.c.o rhash-librhash-sha3.c.o rhash-librhash-sha512.c.o -ldl -lrt -o cmake
**/public/home/syliu/work/cmake-3.24.3/Bootstrap.cmk/cmake: symbol lookup error: /public/home/syliu/work/cmake-3.24.3/Bootstrap.cmk/cmake: undefined symbol: ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3


Error when bootstrapping CMake:
Problem while running initial CMake**


img

尝试使用 CMake 时遇到了“Error when bootstrapping CMake”错误,可能是由于以下原因导致的:

CMake 的源代码有损坏。这可能是由于网络故障或磁盘错误导致的。你可以尝试重新下载 CMake 的源代码并重试。
系统环境不满足 CMake 的要求。CMake 需要某些系统库(例如 zlib 和 bzip2)才能正常工作。如果这些库没有安装或版本过旧,CMake 就可能无法启动。

需要root才能安装或读取那些相关依赖


安装 libarchive

dnf install libarchive 或者 yum install libarchive

这个问题可能是由于 C++ 库的版本冲突造成的。在运行 bootstrap 脚本时,如果使用的 C++ 库的版本与系统中已经安装的版本不同,就可能会出现这种错误。

解决方法可以是在运行 bootstrap 脚本之前使用一些工具(如 ldconfig)来刷新库文件搜索路径,以便系统能够找到正确版本的库文件。

如果这个问题仍然存在,可以尝试使用源代码安装 CMake,并在编译时指定 C++ 库的路径。

例如:

./configure --with-libcxx=/path/to/libcxx
make
make install

**/public/home/syliu/work/cmake-3.24.3/Bootstrap.cmk/cmake: symbol lookup error: /public/home/syliu/work/cmake-3.24.3/Bootstrap.cmk/cmake: undefined symbol: ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3
报错含义:
**/public/home/syliu/work/cmake-3.24.3/Bootstrap.cmk/make:符号查找错误:
/public/home/slyiu/work/cmake-3.243/Bootstrap.com/cmake:未定义符号:ZNSt7_cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3


Error when bootstrapping CMake:
Problem while running initial CMake**
报错含义:
引导CMake时出错:
运行初始CMake时出现问题**

从报错来看,大部分的问题原因都是动态库的版本过旧,导致应用程序找不到对应的符号而引起的
解题思路:
1.确定指定库链接正确。
2.找到指定库,nm 库名 | grep ‘错误提示信息变量’
分析:如果出现-U,说明这个变量应该在别的库中定义。
3.ldd 库名,找到变量应该出现的库
4.nm 指定库,查看变量名等,如果没有,有可能是版本或者编译问题。

这个错误通常是由于在编译 CMake 时链接了一些动态库,但是在执行 CMake 时这些动态库却没有被找到所导致的。

建议检查一下以下几点:

1、确保在编译 CMake 时已经指定了所有需要的库的路径。

2、在执行 CMake 时,确保动态库文件能被找到。可以使用 ldd 命令检查一下,如果有缺失的库文件会被标记为 not found。

3、确保在编译 CMake 时使用的编译器和执行 CMake 时使用的编译器是同一个版本的。

4、如果仍然无法解决问题,可以试试使用 strace 命令来跟踪一下 CMake 执行时的系统调用,从而找到问题的根本原因。
仅供参考,望采纳,谢谢。