OpenCV + CUDA + OSX Mavericks
OpenCV + CUDA + OSX Mavericks
在将我的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
有人有这个问题吗?我在网上搜索过这个特定的错误(以前的错误确实有一些建议,但这次没有(,但没有成功。
非常感谢!
这是一个"老"问题,因为Mac上的默认编译器是llvm
而不是gcc
,OSX 10.8上也会出现这种情况。
先决条件:如果您使用的是新的Mac,或者是直到最近(比如说,3或4个月前(才安装开发工具的Mac,那么您需要通过检查/usr/bin
的内容来检查机器上是否安装了gcc/g++
。
如果未安装gcc/g++
,则需要通过自制程序等方式进行安装。
Cmake设置:在cmake
设置中,确保C和C++CUDA主机编译器都设置为您安装的gcc/g++
,通常在/usr/local/bin
中。在这个问题中也可以找到一些有用的信息。
以下是我如何使用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_COMPLER更改为使用"/usr/bin/clang"。幸运的是,CUDA 5.5支持clang,而不仅仅是gcc
- 显然,CUDA 5.5只支持旧的libstdc++库,而不支持更现代的libc++,因此更新CUDA_NVCC_FLAGS以告知mvcc通过告知natia compilar使用此旧库。添加"-Xcompiler-stdlib=libstdc++;-Xlinker-stdlib=libstdc++">
- 还告诉编译库的其余部分的C++编译器使用libstdc++:显示CMAKE的高级选项,并转到CMAKE将"-stdlib=libstdcC++"添加到CMAKE_CXX_FLAGS和CMAKE_EXE_LINKER_FLAGS
好吧,经过几天的艰苦工作,我终于让它在我的机器上工作了。
我使用了Opencv 2.4的git版本,但我想它与您使用的版本没有太大区别。
我遇到的问题如下:
- 在Mac 10.9上,gcc已从clang的利润分配中删除。然而,CUDA拒绝被叮当使用。即使在cmake中将CUDA_HOST_COMPLER设置为gcc版本也是不够的,因为链接将由主编译器完成,并且不适用于clang。此外,CUDA不接受>=4.7的gcc版本。长话短说,我安装了一个带有macports的gcc旧版本来编译所有的库
- 如果你使用gcc而不是clang,问题是对QTKit最新框架(QuickTimeKit(的调用不再编译,所以我不得不停用它(你可以在OpenCVFindLibsVideo.cmake->set(HAVE_QTKit NO(中更改它(
- 我还必须安装Qt5才能有一个工作的GUI(否则highgui模块将无法编译,其中包括"imload"answers"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。这最终相当困难,但现在一切似乎都正常了:-(
@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)
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- C ++是否有C ++ 17 OSX 10.13.6的标志
- 各种版本的 Mac OSX 向后兼容性如何?(Xcode C++
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- 在 OSX 上打开 SDL 窗口时不要打开终端窗口
- 如何在 OSX 10.15 中使用 Clang -Wno-nullability-completeness 选项编译整个
- 如何在OSX上导航到用户输入站点?
- 为什么OSX的条带不能去除弱符号?
- OSX Catalina 上的C++和宝石问题
- 为什么 OSX Mavericks 无法编译我的 GLSL 着色器?
- 无法在osx mavericks上编译tokumx/mongodb
- 在c/c++代码中使用什么宏来识别Mavericks OSX 10.9
- Xcode 4 Mavericks 为 OSX 创建通用二进制文件挂起
- OpenCV + CUDA + OSX Mavericks
- OSX Mavericks在c程序中获取文件的标签
- c++二叉树可以在CentOS 6中工作,但不能在Mac OSX Mavericks中工作
- mavericks osx 10.9上的VTK编译错误
- 从程序集(OSX Mavericks x64)调用C/C++函数