返回

CMake警告:/usr/local/lib中隐藏的运行时库,如何解决?

Linux

CMake 警告:隐藏在 /usr/local/lib 中的运行时库

/usr/local/lib 中安装库后,使用 CMake GUI 配置时,你可能会遇到以下警告:

运行时库 [libmpi.so.40] 在 /usr/lib/x86_64-linux-gnu 中可能被以下文件隐藏:/usr/local/lib

此警告表明 CMake 检测到同一名称的库位于多个位置,它不确定要使用哪个。本指南将指导你解决此问题并确保使用正确的库。

原因

此警告是由以下情况触发的:

  • /usr/lib/x86_64-linux-gnu 中安装了某些库(例如 libmpi.so.40)。
  • /usr/local/lib 中安装了具有相同名称的库。
  • CMake 在查找库时会同时考虑这两个目录。

解决方案

1. 确保 CMake 使用正确的库

通过在 CMakeLists.txt 文件中添加以下行,告诉 CMake 优先考虑 /usr/lib/x86_64-linux-gnu 目录中的库:

set(CMAKE_LIBRARY_PATH /usr/lib/x86_64-linux-gnu)

2. 从 LD_LIBRARY_PATH 中移除多余的路径

如果 /usr/local/lib 已添加到 LD_LIBRARY_PATH 环境变量中,CMake 可能优先考虑该目录中的库。通过修改 .bashrc 文件或使用以下命令来移除此路径:

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu

3. 重新配置 CMake

在进行更改后,重新配置 CMake 以应用这些更改:

ccmake ..

其他注意事项

  • 确保你的 CMake 版本是最新的。
  • 如果问题仍然存在,请尝试使用 CMAKE_OSX_DEPLOYMENT_TARGET 变量来指定目标 macOS 版本。
  • 考虑在 /etc/ld.so.conf 中添加 /usr/lib/x86_64-linux-gnu 目录,并运行 ldconfig 以更新链接器缓存。

常见问题解答

1. 为什么会出现此警告?

此警告表示 CMake 检测到具有相同名称的库位于多个位置,并且它不确定要使用哪个。

2. 如何修复此问题?

按照解决方案部分中概述的步骤进行操作,包括设置 CMAKE_LIBRARY_PATH 和修改 LD_LIBRARY_PATH

3. 如果重新配置 CMake 后问题仍然存在怎么办?

尝试使用 CMAKE_OSX_DEPLOYMENT_TARGET 变量或更新 CMake 版本。

4. 为什么从 LD_LIBRARY_PATH 中移除多余的路径很重要?

移除多余的路径可以防止 CMake 优先考虑不正确的库。

5. 在哪里可以找到更多有关此主题的信息?

有关 CMake 和运行时库的更多信息,请参考 CMake 文档或在线论坛。