undefinierter Verweis auf das Symbol „_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4“, das OpenCV auf Ubuntu erstellt

Lesezeit: 2 Minuten

Benutzeravatar von user3517736
Benutzer3517736

Ich verwende Ubuntu Trusty und erstelle mit diesem Befehl den folgenden Code. Ich bin neu bei Clang und könnte Hilfe beim Debuggen dieser Fehler gebrauchen. Die cpp- und hpp-Dateien, aus denen diese C-Bindungen stammen, werden gut kompiliert. Ich habe die Header aus diesen Dateien in die folgende Datei kopiert, die ich hier aufgelistet habe, w.cpp

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

Hier die Fehler:

        /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)

Hier ist der Inhalt von w.cpp. Ich versuche, Code mit Clang zu benchmarken.

        #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);
           }

        }

  • c++filt sagt, dass _ZNSt8ios_base4InitD1Ev ist der verzierte/verstümmelte Name für std::ios_base::Init::~Init(). Der @@GLIBCXX_3.4 ist eindeutig ein Tag zur Bibliotheksversionierung, aber ich kenne den Mechanismus nicht, wie es funktionieren soll.

    – Michael Burr

    25. April 2014 um 7:02 Uhr

  • Versuchen Sie Folgendes hinzuzufügen: -stdlib=libc++

    – Brett Hale

    25. April 2014 um 7:06 Uhr

  • @Brett Hale Danke, dass du meinen Beitrag kommentiert hast 🙂 … Das hat geholfen … jetzt erhalte ich /usr/local/include/opencv2/core/cvdef.h:343:12: fatal error: ‘cmath’ Datei nicht gefunden # include

    – Benutzer3517736

    25. April 2014 um 11:11 Uhr


  • falls jemand den gleichen Fehler mit bekommt gcc anstatt clang dann stellen Sie sicher, dass Sie verwenden g++

    – Ciprian Tomoiagă

    3. Oktober 2015 um 1:31 Uhr

  • Siehe dies, wenn Sie g ++ verwenden stackoverflow.com/questions/14888626/…

    – Alan

    9. Mai 2017 um 20:57 Uhr

Ich hatte den gleichen Fehler bei der Verwendung von gcc anstelle von g++, ich glaube, Sie müssen clang++ verwenden

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

  • Gute Antwort. Danke!!

    Benutzer2534096

    3. Juni 2018 um 23:11 Uhr

Benutzeravatar von Pe Dro
Pe Dro

Beim Kompilieren von C++-Dateien ist es besser zu verwenden

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

  • Für GCC sollten Sie verwenden g++!

    – usr1234567

    3. Januar um 6:53

1443650cookie-checkundefinierter Verweis auf das Symbol „_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4“, das OpenCV auf Ubuntu erstellt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy