我正在尝试使用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提及没有帮助。
有人能够解释这个并告诉我构建过程的哪个部分出错了?我怎样才能使这个工作?
答案 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。
这是过程:
Cellar
--universal
可能有一种更简单的方法。当brew
自动安装依赖项时,它会传播--universal
开关。因此,您可以尝试删除所有您的自制软件包(首先列出它们),然后使用brew install opencv --universal
安装opencv,让它获取所有传递依赖项,并使它们具有通用性,然后重新安装其余的软件包。 (如果将列表保存在文本文件中,则可以很容易地将其传递给brew
。)
这可能值得作为Homebrew issue tracker on GitHub的新问题进行报道。他们可以帮助您解决问题,并且可能会改进--universal
检查间接依赖关系,如果这是正在发生的事情。或者可能是因为opencv本身是使用--32-bit
而不是更常见的--universal
构建的,因此依赖性检查失败了。
答案 1 :(得分:0)
安装时尝试--universal
选项