2015-02-12 61 views
0

最近我尝试用CUDA支持构建OpenCV,并且在构建模块cudaarithm时遇到了问题。用CUDA支持构建OpenCV错误转换.cu

OpenCV的源:http://github.com/Itseez/opencv.git

OpenCV的分支: GIT中从克隆主分支

OpenCV的承诺:

`commit 5466e321b8c8f97536002a357e5b7ff49a5d2bf9, on Tue Feb 10 12:17:11 2015 +0000` 

CUDA版本: CUDA 6.5

硬件:的MacBook Pro(13英寸,2010年中)

GPU:的NVIDIA GeForce 320M 256 MB

OS版本: OS X约塞米蒂

步骤我用:

1. cd in OpenCVSource, then mkdir myrelease, and cd myrelease 

2. cmake -DPLANTUML_JAR=/usr/local/Cellar/plantuml/8002 -D BUILD_DOCS=1 -DPYTHON2_LIBRARY=/usr/local/Cellar/python/2.7.8_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/libpython2.7.dylib -DPYTHON2_INCLUDE_DIR=/usr/local/Cellar/python/2.7.8_2/Frameworks/Python.framework/Versions/2.7/include/python2.7 -DPYTHON3_LIBRARY=/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/libpython3.4m.dylib -DPYTHON3_INCLUDE_DIR=/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/include/python3.4m -D CMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -Wno-dev -DNVCC_FLAGS_EXTRA="-Xcompiler -stdlib=libstdc++; -Xlinker -stdlib=libstdc++" -DOPENCV_EXTRA_CXX_FLAGS=" -stdlib=libstdc++" -DOPENCV_EXTRA_EXE_LINKER_FLAGS="-stdlib=libstdc++" .. 

3. make VERBOSE=1 

期待结果:没有错误建设成功

实际结果:

/Users/Hawk/Documents/study/DIP/OpenCV/OpenCVSource/modules/cudaarithm/src/cuda/transpose.cu(61): *error: identifier "getInputMat" is undefined* 

/Users/Hawk/Documents/study/DIP/OpenCV/OpenCVSource/modules/cudaarithm/src/cuda/transpose.cu(67): *error: identifier "getOutputMat" is undefined* 

/Users/Hawk/Documents/study/DIP/OpenCV/OpenCVSource/modules/cudaarithm/src/cuda/transpose.cu(92): *error: identifier "syncOutput" is undefined* 

那么什么:建设OpenCVSource /模块时/ cudaarithm/src目录/ CUDA/transpose.cu,像下面happend错误行动我拿:

  1. 检查代码,我发现这些不确定symboles在OpenCVSource/MOD定义ULES /核心/包括/ opencv2 /核心/ private.cuda.hpp

  2. 检查代码,我confrim的 “transpose.cu” 文件包括 “opencv2 /核心/ private.cuda.hpp”

  3. 检查建筑物日志,并且我确认private.cuda.hpp是在头文件的搜索路径中

  4. cp“opencv2/core/private.cuda.hpp”作为另一个文件“opencv2/core/hawk .hpp“,然后编辑”transpose.cu“以包含这个新文件,并且我发现 ”未解决的符号错误“消失。

虽然这是一个可行的解决方法,但我想知道原始OpenCV源代码是否无法编译。

回答

1

所有,我想我找到了问题原因。

在我遇到这样的问题之前,我已经使用git仓库中的旧代码构建并安装了OpenCV。因此,我的/ usr/local/include/opencv2中已经有头文件,尤其是/usr/local/include/opencv2/core/private.cuda.hpp

但是,它是一个较旧的未定义上述问题中未定义符号的报告。同时我在建立nvcc的时候发现在命令行中有-I/usr/local/include,所以它使用了错误的private.cuda.hpp。如你所知,它应该使用OpenCVSource中的一个,而不是旧的。

我认为解决方案是从我的电脑中优雅地删除原来安装的OpenCV,然后再次构建。我正在尝试,稍后我会报告。