找不到 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 的安装的主要内容,如果未能解决你的问题,请参考以下文章