Estoy tratando de compilar un código y me sale el error

indefinido referencia a boost::program_options::options_description::m_default_line_length

Yo uso g++ en Ubuntu 12.04. Aunque he hecho un poco de programación en C++ soy nuevo en el entorno de desarrollo Linux (sólo se utiliza IDEs anteriormente).

Así que hice una búsqueda básica de este problema, y se encontró sobre la vinculación de algunos temas. Yo no entiendo muy bien como soy un novato. La lectura de algunas de las soluciones que me confunde aún más. Mi impulso de la carpeta de la biblioteca es en /usr/include. Algunas de las soluciones que dice que debe ser en /usr/lib. Pero yo no tengo ningún impulso carpeta no.

¿Qué tengo que cambiar?

  • abrir un terminal y escribir updatedb && locate libboost_program_options. que va a encontrar la ruta donde instaló los archivos lib para el impulso.
  • busque libboost_program_options no devolver nada, pero como he dicho impulsar la carpeta que hay en /usr/include y que también tiene una carpeta de opciones del programa
  • hizo ejecutar updatedb primero?
  • OOps lo siento, acabo de ver que editar ahora.Se ejecutó el comando y me esta errorupdatedb: no se puede abrir un archivo temporal para `/var/lib/mlocate/mlocate.db
  • puede ser que necesite sudo.. usted también puede encontrar el archivo con el find comando, pero me parece que la locate comando a ser mucho más fácil de usar. el updatedb comando simplemente actualiza la base de datos que locate utiliza
  • He MATLAB instalado.Ahora que busque comando muestra que el archivo está en /usr/local/MATLAB/R2011a/bin/glnx86/libboost_program_options.así.1.40.0

InformationsquelleAutor Picowhat | 2012-08-29

5 Comentarios

  1. 28

    Si usted tiene instalado el impulso de repo solo uso -lboost_program_options será más que suficiente.

    Si ha instalado las librerías de boost en alguna otra biblioteca, es necesario especificar que directoty por -L/path/to/lib

    En CMake puede especificar set(CMAKE_CXX_FLAGS "-lboost_program_options")

    Sin embargo con CMake debe utilizar

    FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED)
    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
    TARGET_LINK_LIBRARIES(target ${Boost_LIBRARIES})
    • He instalado desde el repo,pero la lboost_program_options me da un error /usr/bin/ld: no se puede encontrar -lboost_program_options
    • En CMake debe utilizar find_package(Boost ... para localizar Impulso y uso target_link_libraries para especificar las bibliotecas; esto ayuda al trasladar a otros compiladores / OS.
    • bueno, en mi sistema, simplemente -lboost_program_options obras. @user1633316: usted puede hacer una búsqueda de libboost-* archivos. dar ese camino con -L en la nota que hizo de instalar el programa de opciones de repo ?
    • Desde la repo he instalado libboost 1.46-dev,Ahora instalando libboost 1.46-dev TODOS
    • En realidad impulsar hay en /usr/include.y me han dado el L indicador a -L usr/include/boost/program_options
    • usr/include/boost/ es donde los encabezados. es necesario especificar el lib camino
    • encuentra los archivos lib con el locate comando, como te mostré. ese es el camino que debe incluir. más información de aquí
    • Sí he localizado y el problema está resuelto.Gracias ahora voy a tener que hacer lo mismo para otras bibliotecas también como uhd.
    • Para OSX con MacPorts impulso de las bibliotecas, de uso lboost_program_options-mt
    • No estaba funcionando para mí, he tenido que añadir un mínimo número de versión. FIND_PACKAGE(Boost 1.40 COMPONENTS program_options REQUIRED)
    • Arreglado esto en Ubuntu 14.04 sólo después de instalar libboost1.55-todos-dev

  2. 4

    Hubo cambios en el <string> clase en C++11 estándar que puede entrar en conflicto con las versiones de la potenciación de la biblioteca que se compilaron con un no-C++11 compilador (como G++-4.8). Intente volver a compilar boost o utilizando una versión de compilador de C++ que se utiliza para compilar su Impulso a las bibliotecas.

    • Esto me trajo a la derecha de la pista! Yo necesarios para compilar mis cosas con g++-5 en lugar de g++-4.8. Probablemente no es bueno que Ubuntu 16.04 ha g++-4.8 como predeterminado g++ compilador mientras que las bibliotecas de C++ que proporciona es, obviamente, compilado a través de g++-5.
  3. 2

    También verifique que el ajuste de la pre-procesador variable _GLIBCXX_USE_CXX11_ABI es idéntica a la configuración de la variable que se utilizó para la elaboración de impulso. La configuración predeterminada de la variable puede ser diferente dependiendo de la distribución de Linux y la versión del compilador de GNU utilizado.

    Ver Doble ABI para obtener más información.

  4. 0

    Donde está el impulso de las librerías (archivos que terminen en .y así .a)? Encontrar a aquellos, a continuación, agregue esto a su comando link: -L/ruta/a/boost/libs -lname-de-boost-lib

    Este tiene que ser el problema más común que enfrentan las personas cuando empiece a c++. Probablemente hay otras miles de referencia indefinida preguntas sobre ESO. Sólo la búsqueda de referencia indefinida.

  5. 0

    Las bibliotecas se instalan normalmente en /usr/lib (por ejemplo, en mi sistema, /usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.58.0).

    Con el fin de compilar el código que se va a vincular con los de las bibliotecas, se utilizan normalmente los archivos de encabezado, siempre en /usr/include.

    A diferencia de muchas bibliotecas Boost no viene con pkg-config archivos, por lo que deberá añadir el enlazador de ti mismo. Con la habitual Makefile reglas, tendrás algo como LDLIBS += -lboost_program_options.

    Nota también de que, a pesar de la libboost-dev paquete contiene las cabeceras de program_options, también necesita instalar libboost-program-options-dev para llegar a la biblioteca correspondiente.

Dejar respuesta

Please enter your comment!
Please enter your name here