2

将我的 OSX 更新到 10.9 (Maverick) 后,我无法使用 CUDA 支持编译 OpenCV。我能够安装 CUDA SDK 并编译和运行所有示例,所以这不是 CUDA 问题。

我收到以下错误:

[ 22%] Built target IlmImf
[ 22%] Building NVCC (Device) object modules/core/CMakeFiles/cuda_compile.dir/src/cuda/./cuda_compile_generated_matrix_operations.cu.o
clang: error: unsupported option '-dumpspecs'
clang: error: no input files
CMake Error at cuda_compile_generated_matrix_operations.cu.o.cmake:206 (message):
Error generating
/Users/josericardo/Downloads/opencv-2.4.6.1/build/modules/core/CMakeFiles/cuda_compile.dir/src/cuda/./cuda_compile_generated_matrix_operations.cu.o

有人有这个问题吗?我已经在网上搜索了这个特定的错误(一些关于以前这样的错误的建议确实存在,但不针对这个),但没有成功。

非常感谢!

4

4 回答 4

2

这是一个“老”问题,因为默认编译器llvm不是gcc在 Mac 上,它也发生在 OSX 10.8 上。

先决条件:如果您使用的是新 Mac,或者直到最近(例如 3 或 4 个月前)才安装开发工具的 Mac,那么您想gcc/g++通过检查以下内容来检查机器上是否安装了开发工具/usr/bin.

如果gcc/g++没有安装,那么您需要通过例如homebrew安装它们。

Cmake 设置:cmake设置中,确保 C 和 C++ CUDA 主机编译器都设置为您gcc/g++/usr/local/bin. 在这个问题中也可以找到一些有用的信息。

于 2013-10-28T09:58:05.527 回答
2

以下是我使用 Xcode 5.0.2 和 CUDA 5.5 在 OSX Mavericks 10.9.1 上编译 OpenCV 2.4.8 的方法:

  • 打开CMake设置项目,并进行基本配置
  • 在最新的Xcode(我认为> = 5)中不再有gcc编译器,不推荐使用clang,所以转到CMAKE项目的CUDA选项并将CUDA_HOST_COMPILER更改为使用“/usr/bin/clang”。幸运的是 CUDA 5.5 支持 clang 而不仅仅是 gcc
  • 显然 CUDA 5.5 仅支持较旧的 libstdc++ 库而不支持更现代的 libc++,因此更新 CUDA_NVCC_FLAGS 以告诉 mvcc 通过告诉 nativa 编译器使用这个较旧的库。添加“-Xcompiler -stdlib=libstdc++;-Xlinker -stdlib=libstdc++”
  • 还告诉 C++ 编译器编译库的其余部分以使用 libstdc++:显示 CMAKE 的高级选项并转到 CMAKE 将“-stdlib=libstdc++”添加到 CMAKE_CXX_FLAGS 和 CMAKE_EXE_LINKER_FLAGS
于 2014-01-28T18:08:01.083 回答
1

@Marco 发布的解决方案对我有用。但是,还有一点需要注意。由于我们已经使用 libstdc++ 编译了 OpenCV,我们将不得不更改我们自己的应用程序以也与这个 stdlib 链接。如果我们尝试在没有 libstdc++ 标志的情况下进行编译,我们会得到未定义的符号链接错误,类似于:

Undefined symbols for architecture x86_64:
    "cv::imwrite(cv::String const&, cv::_InputArray const&, std::__1::vector<int, std::__1::allocator<int> > const&)", referenced from:
    lbp::LBP::saveLBPImage(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in LBP.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
于 2014-03-19T05:53:22.420 回答
1

好的,经过几天的努力,我设法让它在我的机器上工作。

我使用了 Opencv 2.4 的 git 版本,但我想它与您使用的版本没有太大区别。

我遇到的问题如下:

  • 在 Mac 10.9 上,gcc 已从 clang 的利润分配中删除。但是,clang 拒绝使用 CUDA。即使在 cmake 中将 CUDA_HOST_COMPILER 设置为 gcc 版本也是不够的,因为链接将由主编译器完成,并且不适用于 clang。此外,CUDA 不接受 gcc 版本 >= 4.7。长话短说,我用 macports 安装了一个旧版本的 gcc 来编译所有的库。
  • 如果您使用 gcc 而不是 clang,问题是对 QTKit (QuickTimeKit) 的最新框架的调用不再编译,所以我不得不停用它(您可以在 OpenCVFindLibsVideo.cmake -> set(HAVE_QTKIT NO) 中更改它)。
  • 我还必须安装 Qt5 才能有一个工作的 GUI(否则 highgui 模块将无法编译,其中包括 'imload' 和 'imwrite' 功能)
  • 也不要使用 cmake 2.8.12 但 2.8.11 有一些链接器选项的错误 - > http://comments.gmane.org/gmane.comp.programming.tools.cmake.user/48007
  • 您还必须设置 CMAKE_SYSTEM_PROCESSOR。如果未设置,它将在 FindCUDA.cmake 行 762 和 770 中生成错误。

可能我忘记了几件事,我想我也必须停用 ffmpeg。最后这很困难,但现在一切似乎都正常了:-)

于 2013-11-02T13:47:31.323 回答