C++ 核心转储中的OpenCV示例编译结果

C++ 核心转储中的OpenCV示例编译结果,c++,opencv,C++,Opencv,我正在使用以下代码为OpenCV编译一个示例: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace cv; using namespace std; int main( int argc, char** argv ) { if( argc != 2) { cout &l

我正在使用以下代码为OpenCV编译一个示例:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
    if( argc != 2)
    {
     cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
     return -1;
    }

    Mat image;
    image = imread(argv[1], CV_LOAD_IMAGE_COLOR);   // Read the file

    if(! image.data )                              // Check for invalid input
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }

    namedWindow( "Display window", WINDOW_AUTOSIZE );// Create a window for display.
    imshow( "Display window", image );                   // Show our image inside it.

    waitKey(0);                                          // Wait for a keystroke in the window
    return 0;
}

如果我省略了另外添加的一个库,就会出现链接错误。当试图运行程序时,我得到一个“无效的机器代码”错误。如何解决这个问题?

您正在链接到
-L/usr/local/share/OpenCV/3rdparty/lib/
,我认为您应该链接到
-L/usr/local/lib/
。第三方LIB用于某些图像编解码器。。。。此外,我通常不使用
-lopencv\u imgcodecs
,在这种情况下,如果我省略
-lopencv\u imgcodecs
,您就不会使用
-lopencv\u功能2d
,我得到
/usr/bin/ld:/tmp/cc2raORo.o:对符号“\u ZN2cv6imreadERKNS\u 6StringEi”的未定义引用/usr/local/lib/libopencv\u imgcodecs.so:添加符号时出错:命令行中缺少DSO
,如果我省略了其他链接路径,我得到
/usr/bin/ld:找不到-lippicv
。对不起,我习惯于opencv 2.4。。。在3.x中,他们将imread移动到imgcodecs。别忘了包括
#包括“opencv2/imgcodecs.hpp”
另外,
-I/usr/local/include/opencv2
这应该没有opencv2。(您已经在每个include中包含了该部分)。对于,
-lippicv
您必须使用该链接路径(不要忘了链接另一个)或使用该选项编译opencv(参见此)
g++ -I/usr/local/include/opencv2 `pkg-config --cflags --libs opencv` -L /usr/local/share/OpenCV/3rdparty/lib/ opencv.cpp -o opencv -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_features2d -lopencv_imgcodecs