我正在尝试使用 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/