找不到 libjpeg 的安装

Posted

技术标签:

【中文标题】找不到 libjpeg 的安装【英文标题】:Installation of libjpeg not found 【发布时间】:2021-02-11 00:29:48 【问题描述】:

我是 macOS 新手,在使用库 libjpeg 时遇到问题。

使用 brew install jpeg 安装后,我什至尝试重新安装。

joshbone@Joshs-Mac-mini ~ % brew reinstall jpeg
==> Downloading https://homebrew.bintray.com/bottles/jpeg-9d.arm64_big_sur.bottl
Already downloaded: /Users/joshbone/Library/Caches/Homebrew/downloads/12e480d7337641afc99230ff2b626197e3206ea378eef8ccbb8b11f587afe7f4--jpeg-9d.arm64_big_sur.bottle.tar.gz
==> Reinstalling jpeg 
==> Pouring jpeg-9d.arm64_big_sur.bottle.tar.gz
????  /opt/homebrew/Cellar/jpeg/9d: 21 files, 1001.2KB

然后我尝试查看是否可以找到该库,我在终端中键入以下命令:“gcc -ljpeg”。这给出了以下输出:

ld: library not found for -ljpeg
clang: error: linker command failed with exit code 1 (use -v to see invocation)

为什么找不到库?我能做些什么来修复安装?我是否正确使用了这些终端命令?

编辑:我设法在 /opt/homebrew/Cellar/jpeg/9d/lib 下找到了符号链接 (.dylib)。但是当我运行 gcc -ljpeg -L /opt/homebrew/Cellar/jpeg/9d/lib/ 时,我收到以下错误消息:

Undefined symbols for architecture arm64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

【问题讨论】:

尝试添加-L /usr/local/lib 【参考方案1】:

为什么找不到库?

它要么不存在,要么不在包含路径中。

我可以做些什么来修复安装?

按照 gcc 的建议使用 -v 标志 (gcc -ljpeg -v)。你会看到一个-L 标志,它会告诉你它在哪里寻找库文件(包含路径)。就我而言,它是-L/usr/local/lib,如果我在该目录中查找“jpeg”(ls /usr/local/lib/ | grep jpeg),我会看到libjpeg.dylib 在那里。

brew 默认安装到 Intel 上的 /usr/local/Cellar 或 ARM 上的 /opt/homebrew(在此称为 <prefix>)。文件<prefix>/jpeg/9d/lib/libjpeg.dylib 应该存在并且brew 应该已经创建/usr/local/lib/libjpeg.dylib 作为已安装版本的符号链接。可能 brew 并没有像它应该的那样创建那个符号链接。运行 brew doctor 可能会提供一些见解,或者您可以手动创建该符号链接,但在不了解更多信息的情况下,您可能会在使用其他库时遇到此问题。

另一个选择是告诉 gcc 查看 brew 说它安装 libjpeg 的路径:gcc -v -ljpeg -L <prefix>/jpeg/9d/lib/。这显然会破坏其他库,但它让我们知道该库将实际运行。

而且检查权限永远不会有坏处。

我是否正确使用了这些终端命令?

是的。我使用全新安装的 Mojave 进行了测试。我跑了gcc -ljpeg,得到了和你一样的错误。然后我跑了brew install jpeg 然后gcc -ljpeg 返回了你所期望的(undefined symbols [...] "_main"

在某些情况下,标头是单独捆绑的,您将安装 brew install package-dev 之类的东西,但它们与 jpeg 包捆绑在一起。

由于您是 MacOS 的新手,因此我经常遇到使用它进行开发的怪癖。它远不及在 Windows 上开发的挫败感,但利用 MacOS 进行开发的最佳方式是通过 ssh 进入 Linux 机器 imo

【讨论】:

我的路径 /usr/local/ 好像是空的,所以它不包含“地窖”子目录 我仔细查看了您最初问题的输出,brew 正在安装到 /opt/homebrew,因此您必须拥有 ARM 处理器 Mac。检查 jpeg 包的 /opt/homebrew 目录并运行 brew link jpeg 以触发到 /usr/local 的链接(如果存在)。看看这是否标志着错误。如果你还没有跑过brew doctor,那就从这个开始 正如我的回答中提到的,将路径添加到 jpeg 库将起作用,但自制软件应该会自动链接到现有库。如果您使用自制软件修复它,您可能不必对您安装的每个库都执行此操作,这可能会很快变得笨拙。如果只有 jpeg 包受到影响,那么 imo 更好的解决方法是创建符号链接,ln -s /opt/homebrew/Cellar/jpeg/9d/lib/libjpeg.9.dylib /usr/local/lib; ln -s /opt/homebrew/Cellar/jpeg/9d/lib/libjpeg.9.a /usr/local/lib; ln -s /opt/homebrew/Cellar/jpeg/9d/lib/libjpeg.dylib /usr/local/lib;【参考方案2】:

我通过尝试卸载库找到了安装路径。

我运行“brew uninstall jpeg”,由于依赖关系而拒绝安装,但错误消息的第一行给了我查看的路径。

Error: Refusing to uninstall /opt/homebrew/Cellar/jpeg/9d

由于我将这个库用于 Xcode 项目,我只需将此路径 + /lib/ 添加到我在 Xcode 中的库搜索路径中,它就能找到该库。

【讨论】:

【参考方案3】:

使用 cmake 和这个命令帮助了我:

cmake -DJPEG_LIBRARY_RELEASE=/opt/homebrew/Cellar/jpeg/9e/lib/libjpeg.a

【讨论】:

以上是关于找不到 libjpeg 的安装的主要内容,如果未能解决你的问题,请参考以下文章

project安装程序找不到任何可安装的产品

matlab安装,找不到指定模块,程序

mac安装包安装好的软件怎么找不到?

找不到可安装的isam

安装cab文件 系统找不到指定的文件

安装网站的时候找不到HTML文件