CMake警告:/usr/local/lib中隐藏的运行时库,如何解决?
2024-03-04 00:11:01
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 文档或在线论坛。