macos - Mac 10.7.5 上的 Homebrew OpenCV 32 位

标签 macos opencv homebrew 32-bit

我正在尝试使用 Homebrew 在 Mac 10.7.5 上构建 OpenCV 的 32 位版本。我试图这样做,以便我可以通过 OpenCV 中的 32 位 Macam 驱动程序访问 USB 网络摄像头。

酿酒博士:

$ brew doctor
Your system is raring to brew.

brew 配置:

$ brew --config
HOMEBREW_VERSION: 0.9.4
ORIGIN: https://github.com/mxcl/homebrew.git
HEAD: 56d86e070a60b9deac092a844993332945855027
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
CPU: quad-core 64-bit sandybridge
OS X: 10.7.5-x86_64
Xcode: 4.6.1
CLT: 1.0.0.9000000000.1.1249367152
LLVM-GCC: build 2336
Clang: 4.2 build 425
X11: 2.6.5 => /usr/X11
System Ruby: 1.8.7-358
Perl: /usr/bin/perl
Python: /usr/local/bin/python => /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/bin/python2.7
Ruby: /Users/aaron/.rvm/rubies/ruby-1.9.3-p327/bin/ruby

当我尝试安装 32 位 OpenCV 时的完整控制台输出(警告,非常大的转储):http://pastebin.com/hwKzKLQX

issue brew 提及没有帮助。

是否有人能够解释这一点并告诉我构建过程的哪一部分出了问题?我怎样才能让它工作?

最佳答案

这看起来像是在尝试链接 32 位版本的 FFMPEG 或类似的库,但没有找到它们。 32 位程序需要链接到其所有库的 32 位版本。这些库可能仅构建为 64 位。关键错误如下所示。

ignoring file /usr/local/lib/libavcodec.dylib, file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0 ) which is not the architecture being linked (i386)

您的错误消息输出有点不稳定和乱码,看起来像是并行 make 作业交错输出。使用 Homebrew Troubleshooting Guide 中描述的单一作业版本使调试更容易。

这看起来像是与您链接的公式和依赖项定义不同的问题(这是关于 --32-bit 开关不尝试在第一名)。解决方法可能是遍历 OpenCV 依赖的所有库(连同它们的依赖关系,传递性地)并使用 --universal 开关重新安装它们。默认情况下可能只构建它们的 64 位版本。 Homebrew 没有一种机制来表达对间接依赖的包的位数或其他构建选项(例如 --universal)的依赖。

在 OS X 10.8.3 上运行 brew install opencv --universal 时,我能够重现类似的链接错误,提示 libjpeg 中的符号,并且当我使用 重建 jpeg 时 - -universal,他们清除了,只是被其他链接错误取代,这些链接错误通过 --universal 其他库的重建清除,最终生成 32 位 opencv 构建。这个东西链接到很多库。

过程如下:

  • 在单作业模式下构建 opencv。
  • 确定链接失败的库文件。可能是“忽略”消息中的那个。
  • 确定该文件来自哪个包。检查它和它的父目录,看看它们在哪里被符号链接(symbolic link)到 Cellar
  • 重建那个包,如果需要的话,用 --universal
  • 重建它的依赖
  • 重复直到所有链接错误最终消失

可能有更简单的方法。当 brew 自动安装依赖项时,它会传播 --universal 开关。所以你可以尝试删除所有你的 Homebrew 程序包(首先列出它们),然后使用 brew install opencv --universal 安装 opencv 并让它获取所有传递依赖项并使它们也通用,然后安装其余的包。 (如果您将列表保存在文本文件中,您将能够很容易地将其通过管道传输到 brew。)

这可能值得在 Homebrew issue tracker on GitHub 上作为新问题报告.他们可以帮助您解决问题,并且可能会改进间接依赖项的 --universal 检查,如果这是这里发生的事情的话。或者可能是因为 opencv 本身是用 --32-bit 而不是更常见的 --universal 构建的,所以依赖性检查失败了。

关于macos - Mac 10.7.5 上的 Homebrew OpenCV 32 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15861156/

相关文章:

c# - 线程导致应用程序在 iOS 上滞后,但在 Android 上不会

python - "error: $MACOSX_DEPLOYMENT_TARGET mismatch: now "10.3 "but "10.6 "during configure"尝试 pip 安装不同的包时?

macos - 如何使用 Homebrew 在 macOS 上安装支持 PCRE 的 Git?

python - 使用 Python 3 支持构建 OpenCV

python 3.6.1 opencv 3.3.1 cv2.imshow() 不显示图像

macos - nginx 的 "ssl"指令已弃用,使用 "listen ... ssl"

ruby - 安装 Ruby gems 不适用于 Home Brew

objective-c - 如何将 NSString 转换为可以与 FSCreateDirectoryUnicode 一起使用的内容?

swift - 捕获立体声音频数据

ios - 在 Realm swift 中重命名类的最佳方法