解决Anaconda覆盖系统库导致的ROS编译错误

17 下载量 147 浏览量 更新于2023-05-04 收藏 39KB PDF 举报
"该问题源于在Linux环境下,用户在编译ROS(机器人操作系统)工程时遇到了一个关于动态链接库的问题。错误提示表明运行时库文件libssl.so.1.1在/usr/lib/x86_64-linux-gnu目录下可能被/home目录下的anaconda3库中的文件遮蔽了。这通常是因为安装Anaconda后,其路径被添加到了环境变量PATH的前面,导致系统在寻找库文件时优先考虑Anaconda的路径,而非系统的标准库路径。" 在深入讨论这个问题之前,我们需要了解几个关键概念: 1. **动态链接库 (.so 文件)**:在Linux系统中,动态链接库是一种共享的代码存储库,程序在运行时可以动态地加载和使用这些库。例如,libssl.so.1.1是OpenSSL库的一个版本,用于提供加密和安全套接层(SSL/TLS)协议的支持。 2. **环境变量 PATH**:PATH变量包含了系统在执行命令时查找可执行文件的目录列表。当系统尝试执行一个命令时,它会按照PATH中列出的顺序搜索这些目录。 3. **Anaconda**:Anaconda是一个开源的Python和R分发版,包含了众多科学计算库,并且提供了一个便捷的环境管理工具。它有自己的库路径,可能会与系统默认的库路径冲突。 问题在于,当安装了Anaconda后,其路径被设置到了PATH环境变量的最前面,使得系统在查找libssl.so.1.1时首选了Anaconda的版本,而不是系统默认的。这可能导致不兼容或缺失依赖的问题,尤其是在编译ROS这样的复杂工程时。 解决这个问题有以下几种方法: 1. **临时修复**:通过修改当前终端的PATH环境变量,将系统路径提前。例如,输入: ``` export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/rw/anaconda3/bin:/home/rw/anaconda3/condabin" ``` 这样,系统路径会先于Anaconda路径被检查,但仅对当前终端有效。 2. **永久修复**:编辑用户的bash配置文件`.bashrc`。打开编辑器(这里使用gedit): ``` sudo gedit ~/.bashrc ``` 在文件末尾添加上述的PATH设置,然后保存并关闭文件。更新环境变量设置: ``` source ~/.bashrc ``` 这样,每次启动新的终端时,都会使用修正后的PATH。 3. **在编译前临时退出Anaconda环境**:如果正在使用Anaconda的特定环境,可以通过`conda deactivate`命令退出当前环境,然后再进行ROS的编译。 4. **调整Anaconda环境的配置**:也可以选择在Anaconda环境中配置单独的ROS开发环境,避免与系统库冲突。 在编译ROS时遇到的CMake警告可能是由于这个库路径问题导致的。CMake是用于构建、管理和部署软件的跨平台自动化构建系统,它在构建过程中会检测依赖项和库。因此,修复上述路径问题通常能消除这类警告。如果警告依然存在,可能需要检查CMakeLists.txt文件,确保正确指定了库的搜索路径。

-- Detected 64-bit platform -- UNIX: Configuring uninstall target -- UNIX: Created uninstall target -- UNIX: Using default system linker -- UNIX: Detected compiler: /usr/bin/cc -- Clang: Minimum version required is 7.0.0, found 14.0.0 - ok! -- Using mysql-config: /usr/bin/mysql_config -- Found MySQL library: /usr/lib/x86_64-linux-gnu/libmysqlclient.so -- Found MySQL headers: /usr/include/mysql -- Found MySQL executable: /usr/bin/mysql fatal: 不是 git 仓库(或者任何父目录):.git CMake Error at cmake/genrev.cmake:116 (string): string sub-command REGEX, mode MATCH needs at least 5 arguments total to command. Call Stack (most recent call first): CMakeLists.txt:83 (include) * TrinityCore revision : + (+ branch) * TrinityCore buildtype : RelWithDebInfo * Install core to : /home/wow/server3.5.5 * Install configs to : /home/wow/server/etc * Build world/auth : Yes (default) * Build with scripts : Yes (static) * Build map/vmap tools : Yes (default) * Build unit tests : No (default) * Build core w/PCH : Yes (default) * Build scripts w/PCH : Yes (default) * Show compile-warnings : No (default) * Use coreside debug : No (default) * Show source tree : Yes (hierarchical) * Use GIT revision hash : Yes (default) -- Found OpenSSL library: /usr/lib/x86_64-linux-gnu/libssl.so;/usr/lib/x86_64-linux-gnu/libcrypto.so -- Found OpenSSL headers: /usr/include CMake Error at cmake/macros/FindOpenSSL.cmake:579 (message): TrinityCore needs OpenSSL version 1.0 but found too new version 3.0.2. TrinityCore needs OpenSSL 1.0.x or 1.1.x to work properly. If you still have problems please install OpenSSL 1.0.x if you still have problems search on forum for TCE00022 Call Stack (most recent call first): dep/openssl/CMakeLists.txt:16 (find_package) -- Configuring incomplete, errors occurred! See also "/home/wow/TrinityCore/TrinityCore-TDB335.22061/build/CMakeFiles/CMakeOutput.log". See also "/home/wow/TrinityCore/TrinityCore-TDB335.22061/build/CMakeFiles/CMakeError.log".

2023-05-13 上传