【发布时间】:2021-06-06 19:18:42
【问题描述】:
我正在尝试使用 clang 12 和 OpenCV4 在 macOS 11.4 上构建 ORB_SLAM2 并遇到此错误:
make[2]: *** No rule to make target `/usr/lib/libz.dylib', needed by `../lib/libORB_SLAM2.dylib'. Stop.
此文件在我的 Mac 上不存在,由于 macOS 的 SIP,我无法添加此符号链接。正确的路径应该是/usr/local/opt/zlib/lib/libz.dylib
如何修复这个/usr/lib/libz.dylib 引用?
Here is my branch 我的 macOS 构建更改。
我已尝试通过以下方式解决问题:
- 使用
otool -L检查项目的每个直接依赖项,并在必要时从源代码(例如 OpenCV)重新构建,以确保未引用/usr/lib/libz.dylib(修复建议 here) - 在 ORB_SLAM2
CMakeLists.txt中使用 CMake 的FindZLIB.cmake模块来确保找到正确的 ZLIB
以下是显示 ZLIB 已找到但仍然没有成功的输出:
-- Found ZLIB: /usr/local/opt/zlib/lib/libz.dylib (found version "1.2.11")
【问题讨论】:
-
你需要找出错误路径
/usr/lib/libz.dylib的来源。它可能没有被清除缓存(CMakeCache.txt),它可能是一些提供错误路径的实用程序,它可能是硬编码。除非你找到根源,否则你不可能解决问题。 -
绝对不是缓存,我已经清空了整个
build目录。关于如何快速找到这条路径的来源,您有什么建议吗?我对/usr/local/optdylibs 进行了扫描,仍然有很多引用指向错误的libz路径。希望有一种比从源代码重建所有这些库更快的方法来解决这个问题。 -
我将从详细构建 (
make VERBOSE=1) 开始,并检查链接器的确切命令行是否包含错误的路径。 -
搜索包含
libz.dylib的文本文件的源和/或构建目录可能会缩小搜索范围...它应该出现在make用作依赖项的某些文件中... -
也许只是删除该引用并使用
-lz链接已安装在 macOS 中的 zlib dylib。