2011-02-10 20 views
18

Lo siento! ¡He buscado esto mucho en Google y no puedo encontrar una respuesta! Es tonto, lo sé.link static lib en eclipse cdt

No puedo realizar el enlace en las bibliotecas estáticas (* a) en eclipse cdt. Los enumeré en Project-> Settings-> GCC C++ linker -> Libraries. He utilizado la ruta absoluta para asegurarse de que tenía la correcta lib ... y me sale:

no puede encontrar -l/usr/local/lib/libboost_date_time.a

Estoy seguro de que es estúpido lo que yo soy haciendo mal :(

Editar - y debo mencionar que estoy vinculación de las bibliotecas en tiempo de ejecución ...

+1

Puede especificar la ruta completa de libs en gcc anteponiendo ':'. Entonces, en su caso, eso sería '-l: /usr/local/lib/libboost_date_time.a', o agregue ':/usr/...' a las bibliotecas en eclipse. Pero la convención del prefijo 'lib' y la adición de rutas de búsqueda existe por alguna razón, por lo tanto, es mejor usar rutas absolutas solo si es realmente necesario. – erebos

Respuesta

18

recuerdo haber tenido un problema similar camino de regreso cuando estaba compilando nuestro código en Linux (procedente de una Fondo de Windows) y si recuerdo correctamente, especificar la ruta absoluta a la lib estática también no funcionó.

¿Sabe que para vincular a "libboost_date_time.a", necesita especificar "boost_date_time" sin "lib" y "aa"? En mi caso, eso resolvió el problema./usr/local/lib debe estar en su camino en cualquier caso AFAIR.

+1

¿Intenté no soltar la ".a" y sigo teniendo el mismo error ?? – JonnyCplusplus

+2

@Ralph .... Entendido ... necesario para configurar cada dir (-L) y luego cada biblioteca sin la "lib" o la ".a" gracias ... – JonnyCplusplus

+0

Si tiene una ruta directa a la biblioteca, puede vincularse a ella sin el indicador '-l' (por ejemplo,' gcc foo.cpp/usr/local/lib/libboost_date_time.a') –

7

Tuve el problema similar al agregar las librerías en la pantalla de configuración C/C++ General->Paths & Symbols.

lugar en la pantalla C/C++ Build -> settings bajo GCC C++ Linker/Libraries que añade el nombre de la biblioteca sin lib y .a en Bibliotecas (-l) y la adición de la ruta en la ruta de búsqueda de bibliotecas (-L). Esto resolvió mi problema

+0

@ 256: Probablemente sea mejor comenzar una nueva pregunta si esta respuesta no ayudó. – Enigma

+0

thx. eliminar el "lib", además de ".a" era el eslabón perdido! – smertrios

13

Las bibliotecas estáticas o los archivos son solo una colección de archivos de objeto.

Añadir el archivo como Otros objetos bajo C/C++ Build -> Configuración -> C++ Linker -> Otros:

enter image description here

Algunas personas lloran sangriento asesinato sobre la especificación de una ruta completa. Encuentro que funciona en la práctica (a diferencia de la teoría a veces), y no es peor que romper ruta y nombre de archivo, y luego especificarlos con -L y -l. Y mencioné que realmente funciona en la práctica ...

+0

Lo he intentado, parece que no funciona. He hecho esto con los nuevos controladores de mongodb. ¿Hay algo que deba tener cuidado? ¿Como no tener las librerías ".so" en una ruta include? –

+0

Esta es probablemente la mejor respuesta para el OP, ya que su archivo no está prefijado por 'lib'. Funcionó un regalo para mí. ¡Gracias! – Mawg