dyld: 库未加载:/usr/local/opt/jpeg/lib/libjpeg.9.dylib OpenCV C++ MacOS

3

我一直在尝试在MacOS(10.11.6)上使用C++使OpenCV(3.4.0)正常工作。

我尝试了各种安装方法,但最终通过遵循这个指南“成功”了。

现在我正在尝试在CLion中运行以下示例项目:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main( )
{
    Mat image;
    image = imread("image1.jpg", CV_LOAD_IMAGE_COLOR);

    waitKey(0);
    return 0;
}

该项目可以顺利构建,但在尝试运行时出现以下错误:
dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.9.dylib

我一直在寻找相关问题,但只找到了与PHP有关的问题。 非常感谢您提供任何帮助或指引!

2个回答

5

OpenCV需要使用libjpeg库来读取你的jpg文件,并且在你运行程序时动态加载(就像一个DLL)。程序会在预定义的路径/usr/local/opt/jpeg/lib/libjpeg.9.dylib中搜索该动态库,而大多数情况下你的电脑上并不存在这个文件。

第一步是在你的电脑上找到这个库,你可以通过运行以下命令来完成:

sudo find / -name 'libjpeg.*'

如果找不到库(就像我遇到的一样),你有几个选择:从源代码构建库,查找预构建库并下载它,或者从包管理器(如brew或MacPorts)安装它。可能首先尝试使用brew。注意:您可能需要libjpeg库的9版本。 brew install libjpeg命令对我有效。(您需要先安装brew)。
第二步:获取库后,您需要确保程序可以找到它。通常有一种方法可以在OpenCV构建脚本中使用某些构建脚本变量覆盖硬编码路径,例如/usr/local/opt。更简单的方法可能是将其安装在预期位置(/usr/local/opt)或从该路径创建符号链接到实际位置。
我使用了brew,并且它实际上将其安装在预期路径: bash-3.2$ pwd /usr/local/opt/libjpeg/lib bash-3.2$ ls libjpeg.9.dylib libjpeg.a libjpeg.dylib pkgconfig bash-3.2$ brew info libjpeg jpeg: stable 9c (bottled) Image manipulation library http://www.ijg.org /usr/local/Cellar/jpeg/9c (21 files, 724.6KB) *

哇!谢谢你已经给出了一个非常好的答案,battlmonstr! 运行find命令后,我实际上得到了很多结果...看起来它只是不在正确的位置!我甚至有相同的库从hombrew,但在不同的地方... 我应该如何创建一个符号链接到一个真实的位置(我猜你指的是所需动态库已经存在的位置之一)? - undefined
在Mac上,对于像/usr/local这样的位置,需要使用"sudo"命令来创建符号链接。请执行以下命令:sudo ln -s "<existing path>" "<new link path>" - undefined
你是我的英雄!非常感谢!完美地运行了! - undefined

0
如果有其他人在切换到苹果芯片并遇到困难后来到这里,我也留下这个评论,尽管它与OpenCV无关,只是关于libjpeg的一般问题。
你可能需要设置标志。
几个月后,在新的M2机器上没有碰过项目后,我又不得不更新依赖项。我做了以上所有步骤,它被符号链接了,但仍然没有成功。将整个node_modules文件夹复制粘贴到新项目中可以解决问题,但我不明白为什么。所以我运行了上面接受答案中的命令:
brew info libjpeg
我得到了以下输出,让我记起了在几个月前第一个项目升级到ARM架构后出现原始问题时我曾经这样做过。
==> 注意:jpeg是仅限桶(keg-only)的,这意味着它没有被符号链接到/opt/homebrew中,因为它与jpeg-turbo冲突。

如果你需要将jpeg放在PATH环境变量的最前面,请运行: echo 'export PATH="/opt/homebrew/opt/jpeg/bin:$PATH"' >> ~/.zshrc

为了使编译器找到jpeg,您可能需要设置以下内容: export LDFLAGS="-L/opt/homebrew/opt/jpeg/lib" export CPPFLAGS="-I/opt/homebrew/opt/jpeg/include"

第一个注意事项已经完成,但需要在该项目上重新设置标志,我猜。删除了node_modules文件夹,设置了标志,npm install,然后呈现出:至少没有错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接