1

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

酿酒医生:

$ brew doctor
Your system is raring to 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

brew 提到的问题没有帮助。

有人能够解释这一点并告诉我构建过程的哪一部分出了问题吗?我怎样才能得到这个工作?

4

2 回答 2

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)

您的错误消息输出有点不可靠,并且看起来像并行使作业交错输出而出现乱码。使用Homebrew Troubleshooting Guide中描述的单作业版本使调试更容易。

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

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

这是过程:

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

可能有更简单的方法。当brew自动安装依赖项时,它将传播--universal开关。因此,您可以尝试删除所有自制软件包(首先列出它们),然后仅安装 opencvbrew install opencv --universal并让它获取所有传递依赖项并使它们也通用,然后再安装其余的软件包。(如果您将列表保存在文本文件中,您将能够brew非常轻松地将其通过管道传输。)

这可能值得在 GitHub上的 Homebrew 问题跟踪器上报告为新问题。他们可以帮助您解决问题,并可能改进--universal对间接依赖项的检查,如果这就是这里发生的事情的话。或者可能是依赖检查被 opencv 本身构建--32-bit而不是更常见的事实所击败--universal

于 2013-04-25T07:13:25.187 回答
0

安装时尝试--universal选项

于 2013-04-08T01:55:43.353 回答