Mac 10.7.5上的Homebrew OpenCV 32位

时间:2013-04-07 10:01:27

标签: macos opencv homebrew 32-bit

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

Brew Doctor:

$ 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提及没有帮助。

有人能够解释这个并告诉我构建过程的哪个部分出错了?我怎样才能使这个工作?

2 个答案:

答案 0 :(得分:3)

这看起来像是试图链接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开关不首先尝试构建32位二进制文​​件的问题。修复可能是通过OpenCV所依赖的所有库(以及它们的依赖项,传递),并使用--universal开关重新安装它们。默认可能只是构建它们的64位版本。 Homebrew没有一种机制来表达依赖于某些东西间接依赖的包的位数或其他构建选项(例如--universal)。

在OS X 10.8.3上运行brew install opencv --universal时,我能够重现类似的链接错误,抱怨libjpeg中的符号,当我用--universal重建jpeg时,他们清理了,只是为了被其他链接错误取代,这些错误通过--universal重建其他库来解决,最终产生32位opencv构建。这件事链接了很多lib。

这是过程:

  • 在单作业模式下构建opencv。
  • 识别无法链接的库文件。它可能是“忽略”消息中的一个。
  • 确定该文件来自哪个包。检查它及其父目录,看看它们符号链接到Cellar
  • 的位置
  • 使用--universal
  • 重建该包及其依赖项(如有必要)
  • 重复直到所有链接错误最终消失

可能有一种更简单的方法。当brew自动安装依赖项时,它会传播--universal开关。因此,您可以尝试删除所有您的自制软件包(首先列出它们),然后使用brew install opencv --universal安装opencv,让它获取所有传递依赖项,并使它们具有通用性,然后重新安装其余的软件包。 (如果将列表保存在文本文件中,则可以很容易地将其传递给brew。)

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

答案 1 :(得分:0)

安装时尝试--universal选项