C++ OpenCV使用代码块在Linux中编译Eigenface.cpp

C++ OpenCV使用代码块在Linux中编译Eigenface.cpp,c++,linux,opencv,compiler-errors,codeblocks,C++,Linux,Opencv,Compiler Errors,Codeblocks,我想用代码块或Linux终端编译以下OpenCV程序 我不明白我做错了什么。我觉得这很愚蠢,但我找不到 代码块中的编译器和调试器设置: 链接器设置->其他选项:-lopencv_核心-lopencv_对象检测-lopencv_imgproc-lopencv_highgui 搜索目录->编译器:/usr/local/include/opencv 搜索目录->链接器:/usr/lib 我做错了什么? 请帮我解决这个问题 您的源代码不包含main函数,因此可以从下载main.cpp文件并将其放在项目目

我想用代码块或Linux终端编译以下OpenCV程序

我不明白我做错了什么。我觉得这很愚蠢,但我找不到

代码块中的编译器和调试器设置:

链接器设置->其他选项:-lopencv_核心-lopencv_对象检测-lopencv_imgproc-lopencv_highgui

搜索目录->编译器:/usr/local/include/opencv 搜索目录->链接器:/usr/lib

我做错了什么? 请帮我解决这个问题

您的源代码不包含main函数,因此可以从下载main.cpp文件并将其放在项目目录中,或者在eigenface.cpp中取消main的注释,或者甚至可以编写自己的main函数。 使用opencv的链接器选项的完整列表是:-lopencv_calib3d-lopencv_contrib-lopencv_core-lopencv_features2d-lopencv_flann-lopencv_highgui-lopencv_imgproc-lopencv_legacy-lopencv_ml-lopencv_Objdect-lopencv_照片-lopencv_缝合-lopencv_ts-lopencv_视频当然你可能不需要所有这些库,但这不会有什么坏处,因为链接器足够聪明,只包含您实际引用的库。 在命令行中,您可以发出g++main.cpp-eigenface.cpp-o-eigenface-I/usr/include/opencv-L/usr/lib替换/usr/inlude/opencv,替换为包含opencv头的目录,以及/usr/lib替换为包含所有libar文件的目录。如果使用发行版的软件包管理器(如apt get或yum)安装OpenCV,这些可能是默认位置。
find/usr/lib-name'libopencv*.so'| xargs readelf-s | egrep FUNCTION|u name | libop find/usr/lib-name'libopencv*.so'| xargs readelf-s | egrep cvite | libop

文件:./libopencv_legacy.so 680:00000000000936F01046函数全局默认值11 因此,请链接“libopencv_legacy.so”
-lopencv_legacy

查看参考文献[3]和[4]的主要定义在哪里?在另一个文件中?嗯。那么这就不应该是一个链接。您只需编译这个-c,然后稍后链接object.o文件。Kamyar您也能回答我吗?对于编译错误,我能做什么?从字符串常量转换为不推荐的字符串常量:在函数中»void learn«:第57行:从字符串常量转换为“char*”[Wwrite strings]在函数»双重识别«:第192行:从字符串常量到“char*”[Wwrite strings]的不推荐转换@nacaradrians!欢迎使用!很抱歉耽搁了,因为我离开了几天。如果警告的来源可能来自OpenCV或您无法控制的其他地方的旧标题,那么您可以添加以下编译器pragma,告诉GCC不要使用这种特定类型的警告对您进行错误提示:pragma GCC diagnostic ignored-Wwrite strings。把pragma放在代码的开头,在包含任何有问题的标题之前。没问题。我按照你说的那样做编译器忽略它,但我在终端中有一个erorr,它说:void printUsage{printfUsage:eigenface\n,有效命令是\n train\n test\n;}我认为程序无法加载train和test文件。。。
    line 57:   nTrainFaces = loadFaceImgArray("/home/hacker/data/Eigenfacecpp/train.txt");

    line 192: // load test images and ground truth for person number
             nTestFaces = loadFaceImgArray("/home/hacker/data/Eigenfacecpp/test.txt");

    // project the training images onto the PCA subspace
    projectedTrainFaceMat = cvCreateMat(nTrainFaces, nEigens, CV_32FC1);
    for(i=0; i<nTrainFaces; i++)
    {
        cvEigenDecomposite(faceImgArr[i],
                           nEigens,
                           eigenVectArr,
                           0, 0,
                           pAvgTrainImg,
line 78:                    projectedTrainFaceMat->data.fl + i*nEigens);
    }

     cvCalcEigenObjects(nTrainFaces,
                        (void*)faceImgArr,
                        (void*)eigenVectArr,
                        CV_EIGOBJ_NO_CALLBACK,
                        0,
                        0,
                        &calcLimit,
                        pAvgTrainImg,
line 154:                eigenValMat->data.fl);

        //project the test image onto the PCA subspace
        cvEigenDecomposite(faceImgArr[i],
                           nEigens,
                           eigenVectArr,
                           0, 0,
                           pAvgTrainImg,
line 211:                   projectedTestFace);
Compiling: eigenface.cpp

In Function »void learn()«:
line 57:  deprecated conversion from string constant to ‘char*’ [Wwrite-strings]

In Function »double recognize()«:
line 192: deprecated conversion from string constant to ‘char*’ [Wwrite-strings]

/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
obj/Debug/eigenface.o: In function `learn()':
/home/hacker/data/Eigenfacecpp/eigenface.cpp:78: undefined reference to `cvEigenDecomposite'

obj/Debug/eigenface.o: In function `doPCA()':
/home/hacker/data/Eigenfacecpp/eigenface.cpp:154: undefined reference to `cvCalcEigenObjects'

obj/Debug/eigenface.o: In function `recognize()':
/home/hacker/data/Eigenfacecpp/eigenface.cpp:211: undefined reference to `cvEigenDecomposite'