【问题标题】:Homebrew OpenCV 32-bit on Mac 10.7.5Mac 10.7.5 上的 Homebrew OpenCV 32 位
【发布时间】:2013-03-29 11:25:03
【问题描述】:

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

issue brew 提及没有帮助。

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

【问题讨论】:

    标签: macos opencv homebrew 32-bit


    【解决方案1】:

    安装时尝试--universal选项

    【讨论】:

      【解决方案2】:

      这看起来像是在尝试链接 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 中的符号,当我用 --universal 重建 jpeg 时,它们清除了,只是被其他链接错误,通过--universal 其他库的重建清除,最终生成 32 位 opencv 构建。这个东西链接了很多库。

      流程如下:

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

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

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

      【讨论】:

      • 很好的答案,谢谢 - 我将按照这些说明进行操作,如果我有更多问题,我会通知您。
      猜你喜欢
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      相关资源
      最近更新 更多