referencia indefinida al símbolo ‘_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4’ construyendo OpenCV en Ubuntu

2 minutos de lectura

avatar de usuario de user3517736
usuario3517736

Estoy en Ubuntu Trusty y estoy creando el siguiente código con este comando. Soy nuevo en clang y me vendría bien ayuda para depurar estos errores. Los archivos cpp y hpp de estos enlaces C son de compilación fina. Copié los encabezados de esos archivos en el siguiente archivo que he enumerado aquí, w.cpp

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

Aquí están los errores:

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

Aquí está el contenido de w.cpp. Estoy tratando de comparar el código usando clang.

        #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 dice que _ZNSt8ios_base4InitD1Ev es el nombre decorado/destrozado de std::ios_base::Init::~Init(). Él @@GLIBCXX_3.4 es claramente una etiqueta de versión de biblioteca, pero no conozco el mecanismo de cómo se supone que funciona.

    – Michael Burr

    25 de abril de 2014 a las 7:02

  • Intenta agregar: -stdlib=libc++

    – Brett Hale

    25 de abril de 2014 a las 7:06

  • @Brett Hale Gracias por comentar en mi publicación :)… Eso ayudó… ahora obtengo /usr/local/include/opencv2/core/cvdef.h:343:12: error fatal: ‘cmath’ archivo no encontrado # incluir

    – usuario3517736

    25 de abril de 2014 a las 11:11


  • en caso de que alguien obtenga el mismo error con gcc en lugar de clang entonces asegúrate de usar g++

    – Ciprian Tomoiaga

    3 de octubre de 2015 a las 1:31

  • Vea esto si está usando g ++ stackoverflow.com/questions/14888626/…

    – Alan

    9 mayo 2017 a las 20:57

Tuve el mismo error al usar gcc en lugar de g ++, creo que debes usar clang ++

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

  • Gran respuesta. ¡¡Gracias!!

    usuario2534096

    3 de junio de 2018 a las 23:11

Avatar de usuario de Pe Dro
Pe Dro

Al compilar archivos C++, es mejor usar

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

  • Para GCC debes usar g++!

    – usr1234567

    3 de enero a las 6:53

¿Ha sido útil esta solución?