在 Ubuntu 上构建 OpenCV '_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4'符号的未定义引用

undefined reference to symbol '_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4' building OpenCV on Ubuntu

本文关键字:符号 引用 未定义 构建 OpenCV Ubuntu ZNSt8ios base4InitD1Ev@@GLIBCXX      更新时间:2023-10-16

我在Ubuntu Trusty上,我正在用这个命令构建以下代码。我是clang的新手,我可以帮助调试这些错误。这些C绑定的cpp和hpp文件是从编译开始的。我将这些文件的头复制到下面列出的文件中,w.cpp

    clang -std=c++11 w.cpp -o w `pkg-config --cflags --libs opencv`

以下是错误:

        /usr/bin/ld: /tmp/w-2a90f4.o: undefined reference to
        symbol '_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4'
        //usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding 
         symbols: DSO missing from command line
        clang: error: linker command failed with exit code 1 
          (use -v to see invocation)

以下是w.cpp的内容叮当声。

        #include <opencv2/c/mat.hpp>
        #include <opencv2/c/opencv_generated.hpp>
        using namespace cv;
        using namespace std;
        using namespace flann;
        using namespace cvflann;

        void cv_delete(char* self) {
             delete self;
        }

        Mat* cv_create_Mat() {
            return new Mat();
        }

        BFMatcher* cv_create_BFMatcher(int normType, bool crossCheck) {
            return new BFMatcher(normType, crossCheck);
        }


        int main () {
         for( int a = 1; a < 20; a++)
           {
              Mat a =  &cv_create_Mat(); 
              cv_delete(a);
           }
        }

我使用gcc而不是g++时也出现了同样的错误,我相信你必须使用clang++

clang++ -std=c++11 w.cpp -o w `pkg-config --cflags --libs opencv`

编译C++文件时,最好使用

g++ client.cpp -Wall -lstdc++ -o client