Makefile:c++;linux上的文件,无法在opencv 2.4.6中找到cuda库

Makefile:c++;linux上的文件,无法在opencv 2.4.6中找到cuda库,linux,opencv,cuda,makefile,Linux,Opencv,Cuda,Makefile,希望有人能帮上忙 在Linux上使用CUDA工具包5.5重建OpenCV 2.4.6后,尝试使用VAS制作和CLI G+命令构建一个引用OpenCV和CUDA的单个C++文件。每种方法的输入和输出如下所示 Makefile尝试从OpenCV引用*.a文件,但未成功。CLI g++命令尝试引用*.so文件,但有些方法似乎未定义 Makefile是否需要仅访问OpenCV*.a文件 Makefile: CFLAGS = -g Wall LIBPATH = /data/content/cuda/op

希望有人能帮上忙

在Linux上使用CUDA工具包5.5重建OpenCV 2.4.6后,尝试使用VAS制作和CLI G+命令构建一个引用OpenCV和CUDA的单个C++文件。每种方法的输入和输出如下所示

Makefile尝试从OpenCV引用*.a文件,但未成功。CLI g++命令尝试引用*.so文件,但有些方法似乎未定义

Makefile是否需要仅访问OpenCV*.a文件

Makefile:

CFLAGS = -g Wall 
LIBPATH = /data/content/cuda/opencv-2.4.6/lib
LIBS = -lopencv_calib3d_pch_dephelp -lopencv_contrib_pch_dephelp -lopencv_core_pch_dephelp -lopencv_features2d_pch_dephelp -lopencv_flann_pch_dephelp -lopencv_gpu_pch_dephelp -lopencv_haartraining_engine -lopencv_highgui_pch_dephelp -lopencv_imgproc_pch_dephelp -lopencv_legacy_pch_dephelp -lopencv_ml_pch_dephelp -lopencv_nonfree_pch_dephelp -lopencv_objdetect_pch_dephelp -lopencv_perf_calib3d_pch_dephelp -lopencv_perf_core_pch_dephelp -lopencv_perf_features2d_pch_dephelp -lopencv_perf_gpu_pch_dephelp -lopencv_perf_highgui_pch_dephelp -lopencv_perf_imgproc_pch_dephelp -lopencv_perf_nonfree_pch_dephelp -lopencv_perf_objdetect_pch_dephelp -lopencv_perf_photo_pch_dephelp -lopencv_perf_stitching_pch_dephelp -lopencv_perf_superres_pch_dephelp -lopencv_perf_video_pch_dephelp -lopencv_photo_pch_dephelp -lopencv_stitching_pch_dephelp -lopencv_superres_pch_dephelp -lopencv_test_calib3d_pch_dephelp -lopencv_test_contrib_pch_dephelp -lopencv_test_core_pch_dephelp -lopencv_test_features2d_pch_dephelp -lopencv_test_flann_pch_dephelp -lopencv_test_gpu_pch_dephelp -lopencv_test_highgui_pch_dephelp -lopencv_test_imgproc_pch_dephelp -lopencv_test_legacy_pch_dephelp -lopencv_test_ml_pch_dephelp -lopencv_test_nonfree_pch_dephelp -lopencv_test_objdetect_pch_dephelp -lopencv_test_photo_pch_dephelp -lopencv_test_stitching_pch_dephelp -lopencv_test_superres_pch_dephelp -lopencv_test_video_pch_dephelp -lopencv_ts_pch_dephelp -lopencv_video_pch_dephelp -lopencv_videostab_pch_dephelp -lopencv_gpu -lopencv_highgui
INCLUDEPATH1 = /usr/include/opencv2/core
INCLUDEPATH2 = /usr/include/opencv2/highgui 
INCLUDEPATH3 = /usr/include/opencv2/gpu 

all: tiff2png1.so

tiff2png1.so: main.o 
    g++ -o tiff2png1.so main.o  **-L $(LIBPATH) $(LIB)**

main.o: main.cpp 
    g++ -c main.cpp -g -Wall -I $(INCLUDEPATH1)  -I $(INCLUDEPATH2)  -I $(INCLUDEPATH3) $(LIBPATH)

.PHONY: clean
clean:
    rm -vf tiff2png1.so *.o
生成文件输出:

CFLAGS = -g Wall 
LIBPATH = /data/content/cuda/opencv-2.4.6/lib
LIBS = -lopencv_calib3d_pch_dephelp -lopencv_contrib_pch_dephelp -lopencv_core_pch_dephelp -lopencv_features2d_pch_dephelp -lopencv_flann_pch_dephelp -lopencv_gpu_pch_dephelp -lopencv_haartraining_engine -lopencv_highgui_pch_dephelp -lopencv_imgproc_pch_dephelp -lopencv_legacy_pch_dephelp -lopencv_ml_pch_dephelp -lopencv_nonfree_pch_dephelp -lopencv_objdetect_pch_dephelp -lopencv_perf_calib3d_pch_dephelp -lopencv_perf_core_pch_dephelp -lopencv_perf_features2d_pch_dephelp -lopencv_perf_gpu_pch_dephelp -lopencv_perf_highgui_pch_dephelp -lopencv_perf_imgproc_pch_dephelp -lopencv_perf_nonfree_pch_dephelp -lopencv_perf_objdetect_pch_dephelp -lopencv_perf_photo_pch_dephelp -lopencv_perf_stitching_pch_dephelp -lopencv_perf_superres_pch_dephelp -lopencv_perf_video_pch_dephelp -lopencv_photo_pch_dephelp -lopencv_stitching_pch_dephelp -lopencv_superres_pch_dephelp -lopencv_test_calib3d_pch_dephelp -lopencv_test_contrib_pch_dephelp -lopencv_test_core_pch_dephelp -lopencv_test_features2d_pch_dephelp -lopencv_test_flann_pch_dephelp -lopencv_test_gpu_pch_dephelp -lopencv_test_highgui_pch_dephelp -lopencv_test_imgproc_pch_dephelp -lopencv_test_legacy_pch_dephelp -lopencv_test_ml_pch_dephelp -lopencv_test_nonfree_pch_dephelp -lopencv_test_objdetect_pch_dephelp -lopencv_test_photo_pch_dephelp -lopencv_test_stitching_pch_dephelp -lopencv_test_superres_pch_dephelp -lopencv_test_video_pch_dephelp -lopencv_ts_pch_dephelp -lopencv_video_pch_dephelp -lopencv_videostab_pch_dephelp -lopencv_gpu -lopencv_highgui
INCLUDEPATH1 = /usr/include/opencv2/core
INCLUDEPATH2 = /usr/include/opencv2/highgui 
INCLUDEPATH3 = /usr/include/opencv2/gpu 

all: tiff2png1.so

tiff2png1.so: main.o 
    g++ -o tiff2png1.so main.o  **-L $(LIBPATH) $(LIB)**

main.o: main.cpp 
    g++ -c main.cpp -g -Wall -I $(INCLUDEPATH1)  -I $(INCLUDEPATH2)  -I $(INCLUDEPATH3) $(LIBPATH)

.PHONY: clean
clean:
    rm -vf tiff2png1.so *.o
g++-o tiff2png1.so main.o-L/data/content/cuda/opencv-2.4.6/lib main.o:在函数
main'中:
/home/../main.cpp:13:对
cv:gpu::getcudaenabledevicecount()的未定义引用' /home/../main.cpp:15:对
cv::gpu::getDevice()的未定义引用
/home/../main.cpp:21:对
cv::imread(std::basic_string,std::allocator>const&,int)的未定义引用 /home/../main.cpp:27:cv::gpu::GpuMat::GpuMat(cv::Mat const&)的未定义引用 /home/../main.cpp:29:对cv::gpu::Stream::Null()的未定义引用 /home/../main.cpp:29:对
cv::gpu::resize(cv::gpu::GpuMat const&,cv::gpu::GpuMat&,cv::Size\ux,double,double,int,cv::gpu::Stream&)的未定义引用
/home/../main.cpp:42:对
cv::Mat::Mat(cv::gpu::GpuMat const&)的未定义引用 /home/../main.cpp:49:对
cv::_InputArray::_InputArray(cv::Mat const&)的未定义引用
...
main.o:In function
~GpuMat':/usr/include/opencv2/core/GpuMat.hpp:374:对'cv::gpu::GpuMat::release()的未定义引用 collect2:ld返回了1个退出状态 make:[tiff2png1.so]错误1

命令行生成

$g++-o tx.exe main.o-L/data/content/cuda/opencv-2.4.6/lib-lopencv\u gpu

命令行生成输出

/data/content/cuda/opencv-2.4.6/lib/libopencv\u gpu.so:cv::gpu::convertTo(cv::gpu::GpuMat const&,cv::gpu::GpuMat&,double,double,CUstream\u st*)的未定义引用

/data/content/cuda/opencv-2.4.6/lib/libopencv\u gpu.so:cv::gpu::setTo(cv::gpu::GpuMat&,cv::Scalar\u,cv::gpu::GpuMat const&,CUstream\u st*)的未定义引用

/data/content/cuda/opencv-2.4.6/lib/libopencv_gpu.so:cv::gpu::setTo(cv::gpu::GpuMat&,cv::Scalar_,CUstream_st*)的未定义引用


collect2:ld返回1退出状态

看起来您可能在链接器目标中的变量末尾省略了一个“S”

**LIBS** = -lopencv_calib3d_pch_dephelp ...

tiff2png1.so: main.o 
    g++ -o tiff2png1.so main.o  -L $(LIBPATH) $(**LIB**)
因此-l选项不会被传递给链接器

g++ -o tiff2png1.so main.o -L /data/content/cuda/opencv-2.4.6/lib **should be here** main.o

对Makefile的“S”修复现在使其生成与命令行相同的错误。链接器似乎没有检测到Makefile中的“*.a”库。“opencv_gpu”被添加到Makefile中,它似乎是唯一被检测到的库。它有一个“.so”扩展名。谢谢。让链接器检测*.a文件还需要一些其他标志吗?我以前使用-l标志加载过静态库(.a),所以我知道这是可行的。我还没有尝试过混合动态库(.so),不过这可能会导致您的问题。可能尝试此操作以强制静态链接:另外,请确保在加载依赖于其他库的库之前加载任何依赖于其他库的库。以下错误消息令人困惑:/data/content/cuda/opencv-2.4.6/lib/libopencv_gpu.so:cv::gpu::convertTo的未定义引用(cv::gpu::GpuMat const&,cv::gpu::GpuMat&,double,double,CUstream_st*)。这表明opencv库缺少方法。