问题描述
g++ -o OUTPUT runner.cpp main.cpp src/file1.cpp src/file2.cpp
-L/usr/local/cpp_gpu/lib
-lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cudabgsegm -lopencv_cudafeatures2d -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_videostab -lopencv_cudaoptflow -lopencv_optflow -lopencv_cuDalegacy -lopencv_videoio -lopencv_cudawarping -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_dnn -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_imgproc -lopencv_cudaarithm -lopencv_core -lopencv_cudev -ldl -lm -lpthread -lrt
-L/usr/local/cuda/lib64
-lcudart -lnppc -lnppial -lnppicc -lnppicom -lnppidei -lnppif -lnppig -lnppim -lnppist -lnppisu -lnppitc -lnpps -lcublas -lcudnn -lcufft
-I/usr/local/cpp_gpu/include/opencv4
我想将其重写为 distutils.core 的扩展,以便以后可以在 Cython 设置中使用它。 documentation 有点不清楚我应该如何做到这一点。这是我目前得到的(在 setup.py 中)。
includes_dirs = [numpy.get_include(),'/usr/local/cpp_gpu/lib','/usr/local/cuda/lib64']
library_dirs = ['/usr/local/cpp_gpu/include/opencv4']
args = ['-Wno-cpp']
files = ["src/file1.cpp","src/file2.cpp","main.cpp","OUTPUT.pyx"]
libraries = ['opencv_gapi','opencv_stitching','opencv_aruco','opencv_bgsegm','opencv_bioinspired','opencv_ccalib','opencv_cudabgsegm','opencv_cudafeatures2d','opencv_cudaobjdetect','opencv_cudastereo','opencv_dnn_objdetect','opencv_dnn_superres','opencv_dpm','opencv_face','opencv_freetype','opencv_fuzzy','opencv_hdf','opencv_hfs','opencv_img_hash','opencv_intensity_transform','opencv_line_descriptor','opencv_mcc','opencv_quality','opencv_rapid','opencv_reg','opencv_rgbd','opencv_saliency','opencv_stereo','opencv_structured_light','opencv_phase_unwrapping','opencv_superres','opencv_surface_matching','opencv_tracking','opencv_highgui','opencv_datasets','opencv_text','opencv_plot','opencv_videostab','opencv_cudaoptflow','opencv_optflow','opencv_cuDalegacy','opencv_videoio','opencv_cudawarping','opencv_xfeatures2d','opencv_shape','opencv_ml','opencv_ximgproc','opencv_video','opencv_dnn','opencv_xobjdetect','opencv_objdetect','opencv_calib3d','opencv_imgcodecs','opencv_features2d','opencv_flann','opencv_xphoto','opencv_photo','opencv_cudaimgproc','opencv_cudafilters','opencv_imgproc','opencv_cudaarithm','opencv_core','opencv_cudev','dl','m','pthread','rt']
libraries += ['cudart','nppc','nppial','nppicc','nppicom','nppidei','nppif','nppig','nppim','nppist','nppisu','nppitc','npps','cublas','cudnn','cufft ']
ext_modules = [Extension(
"OUTPUT",files,language='c++',include_dirs=includes_dirs,library_dirs=library_dirs,extra_compile_args=args,libraries=libraries
)]
但是编译失败并显示错误消息(如果与 makefile 一起使用,则可以正常工作):
src/file1.hpp:7:34: Fatal error: opencv2/cudaarithm.hpp: No such file or directory
#include <opencv2/cudaarithm.hpp>
解决方法
我发现应该切换包含目录和库目录的问题:
includes_dirs = [numpy.get_include(),'/usr/local/cpp_gpu/include/opencv4']
library_dirs = ['/usr/local/cpp_gpu/lib','/usr/local/cuda/lib64']