Compilar programa c++

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
adbaco
Forista Nuevo
Forista Nuevo
Mensajes: 11
Registrado: Mar Mar 23, 2010 9:13 pm

Compilar programa c++

Mensaje por adbaco » Lun May 10, 2010 11:45 am

Hola,

Estoy intentando compilar un programa en c++, soy bastante nuevo en esto, de hecho si lo consigo sera el primer programa que logre compilar.. ya ves tu...

Creo que el error que me da es el siguiente:

L/home/linux/illinois/libmesh/src -L/home/linux/illinois/SuperLU -lmesh -lgfx -lfltk -lX11 -lXext -lm
/usr/bin/ld: cannot find -lmesh


¿como puedo añadir el -lmesh?
Adjunto el log completo por si en realidad fuera otra cosa,

gracias!





linux@linux-desktop:~/illinois$ make -f Makefile.dat
g++ -c -g -O2 -Wall -Wno-sign-compare -I/home/linux/illinois/libgfx-1.1.0/libgfx-1.1.0/include -DHAVE_CONFIG_H -I/home/linux/illinois/libmesh/include -I/home/linux/illinois/SuperLU/SRC remesh.cxx
remesh.cxx:7:1: warning: "INFINITY" redefined
In file included from /usr/include/math.h:40,
from /usr/include/c++/4.2/cmath:54,
from /home/linux/illinois/libgfx-1.1.0/libgfx-1.1.0/include/gfx/gfx.h:24,
from /home/linux/illinois/libgfx-1.1.0/libgfx-1.1.0/include/gfx/vec2.h:15,
from /home/linux/illinois/libgfx-1.1.0/libgfx-1.1.0/include/gfx/vec3.h:15,
from /home/linux/illinois/libgfx-1.1.0/libgfx-1.1.0/include/gfx/vec4.h:15,
from utils.h:1,
from remesh.cxx:1:
/usr/include/bits/inf.h:27:1: warning: this is the location of the previous definition
In file included from remesh.h:1,
from remesh.cxx:3:
texgui.h: In constructor ‘TexGUI::TexGUI()’:
texgui.h:23: warning: ‘TexGUI::texture’ will be initialised after
texgui.h:14: warning: ‘int TexGUI::grid_period’
texgui.h:25: warning: when initialised here
remesh.cxx: In member function ‘void GUI::compute_all_flows()’:
remesh.cxx:2478: warning: unused variable ‘seed_key’
remesh.cxx:2538: warning: unused variable ‘seed_key’
remesh.cxx: In member function ‘void GUI::post_remesh()’:
remesh.cxx:3552: warning: unused variable ‘face_bound’
remesh.cxx: In member function ‘int GUI::insert_crsng_to_flow(std::vector<int, std::allocator<int> >&, int, bool)’:
remesh.cxx:2873: warning: control reaches end of non-void function
/usr/include/c++/4.2/bits/stl_pair.h: In member function ‘void GUI::generate_init_seeds(std::multimap<float, flow_node, std::less<float>, std::allocator<std::pair<const float, flow_node> > >&)’:
/usr/include/c++/4.2/bits/stl_pair.h:90: warning: ‘fn.flow_node::ratio’ is used uninitialised in this function
remesh.cxx:2301: note: ‘fn.flow_node::ratio’ was declared here
/usr/include/c++/4.2/bits/stl_pair.h:90: warning: ‘fn.flow_node::vertex_id2’ is used uninitialised in this function
remesh.cxx:2301: note: ‘fn.flow_node::vertex_id2’ was declared here
/usr/include/c++/4.2/bits/stl_pair.h:90: warning: ‘fn.flow_node::is_feature’ is used uninitialised in this function
remesh.cxx:2301: note: ‘fn.flow_node::is_feature’ was declared here
remesh.h:54: warning: ‘start_fn.flow_node::vertex_id2’ is used uninitialised in this function
remesh.cxx:2317: note: ‘start_fn.flow_node::vertex_id2’ was declared here
remesh.h:55: warning: ‘start_fn.flow_node::ratio’ is used uninitialised in this function
remesh.cxx:2317: note: ‘start_fn.flow_node::ratio’ was declared here
/usr/include/c++/4.2/bits/stl_pair.h:90: warning: ‘fn.flow_node::is_feature’ is used uninitialised in this function
remesh.cxx:2390: note: ‘fn.flow_node::is_feature’ was declared here
/usr/include/c++/4.2/bits/stl_pair.h:90: warning: ‘backup_seed.flow_node::ratio’ is used uninitialised in this function
remesh.cxx:2420: note: ‘backup_seed.flow_node::ratio’ was declared here
/usr/include/c++/4.2/bits/stl_pair.h:90: warning: ‘backup_seed.flow_node::vertex_id2’ is used uninitialised in this function
remesh.cxx:2420: note: ‘backup_seed.flow_node::vertex_id2’ was declared here
/usr/include/c++/4.2/bits/stl_pair.h:90: warning: ‘backup_seed.flow_node::is_feature’ is used uninitialised in this function
remesh.cxx:2420: note: ‘backup_seed.flow_node::is_feature’ was declared here
remesh.cxx:2390: warning: ‘fn.flow_node::ratio’ may be used uninitialised in this function
remesh.cxx: In member function ‘int GUI::single_grad_flow(const flow_node&, float, std::vector<flow_node, std::allocator<flow_node> >&)’:
remesh.cxx:1970: warning: ‘first_part_length’ may be used uninitialised in this function
g++ -c -g -O2 -Wall -Wno-sign-compare -I/home/linux/illinois/libgfx-1.1.0/libgfx-1.1.0/include -DHAVE_CONFIG_H -I/home/linux/illinois/libmesh/include -I/home/linux/illinois/SuperLU/SRC texgui.cxx
texgui.cxx:14:1: warning: "GL_CLAMP_TO_EDGE" redefined
In file included from /home/linux/illinois/libgfx-1.1.0/libgfx-1.1.0/include/gfx/gl.h:27,
from /home/linux/illinois/libgfx-1.1.0/libgfx-1.1.0/include/gfx/gui.h:20,
from /home/linux/illinois/libmesh/include/mesh/gui-smf.h:15,
from texgui.h:5,
from texgui.cxx:3:
/usr/include/GL/gl.h:1478:1: warning: this is the location of the previous definition
In file included from texgui.cxx:3:
texgui.h: In constructor ‘TexGUI::TexGUI()’:
texgui.h:23: warning: ‘TexGUI::texture’ will be initialised after
texgui.h:14: warning: ‘int TexGUI::grid_period’
texgui.h:25: warning: when initialised here
g++ -o remesh remesh.o texgui.o -g -O2 -Wall -Wno-sign-compare -I/home/linux/illinois/libgfx-1.1.0/libgfx-1.1.0/include -DHAVE_CONFIG_H -I/home/linux/illinois/libmesh/include -I/home/linux/illinois/SuperLU/SRC -L/home/linux/illinois/libgfx-1.1.0/libgfx-1.1.0/src -L/home/linux/illinois/libmesh/src -L/home/linux/illinois/SuperLU -lmesh -lgfx -lfltk -lX11 -lXext -lm
/usr/bin/ld: cannot find -lmesh
collect2: ld returned 1 exit status
make: *** [remesh] Error 1
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Compilar programa c++

Mensaje por akodo » Lun May 10, 2010 1:42 pm

Te faltará alguna librería. Comprueba que tienes todas las librerías necesarias.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
adbaco
Forista Nuevo
Forista Nuevo
Mensajes: 11
Registrado: Mar Mar 23, 2010 9:13 pm

Re: Compilar programa c++

Mensaje por adbaco » Lun May 10, 2010 3:18 pm

Hola akodo, gracias por tu respuesta.

La compilación me genera ficheros ".o" correctamente (codigo objeto según he leído poray..) luego no sé exactamente qué es lo que pretende hacer pero el makefile va a buscar algunos ejecutables en el directorio usr/bin (los ejecutables son lmesh lgfx lfltk etc...) pero estos ejecutables ni los tengo ni sé dónde encontrarlos, ¿alguna idea de dónde puedo encontrarlos?
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Compilar programa c++

Mensaje por akodo » Lun May 10, 2010 4:00 pm

Te genererá algunos archivos .o pero no todos. Creo que no te genera el remesh, remesh.o y texgui.o, que son los que te dan ese error.
Tus "ejecutables" (lmesh, lgfx, etc) realmente son librerías que se enlazan dinámicamente a tu programa, lo que significa que se utilizarán cuando tu programa lo necesite. Sin embargo, el comando "ld" (que es el que se está ejecutando) te dice que no encuentra una de las librerías, con lo que no es posible que esa librería se utilizada, lo que provoca el error.

La opción más sencilla es que instales la librería desde tu gestor de paquetes (que debería tenerla). Creo que la que te pide es la "libmesh", aunque deberías comprobarlo. Instala tanto la librería como los paquetes de desarrollo (al menos en mi gestor de paquetes son libmesh0.6.x y libmesh-dev) y vuelve a ejecutar el makefile. Al menos ya no te debería saltar ese error.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
adbaco
Forista Nuevo
Forista Nuevo
Mensajes: 11
Registrado: Mar Mar 23, 2010 9:13 pm

Re: Compilar programa c++

Mensaje por adbaco » Lun May 10, 2010 4:37 pm

Hola akodo,

me ha generado remesh.o y texgui.o, no sé si falta alguno o con esto ya lo tengo todo...

Gracias por tus pistas, he instalado las librerias y los paquetes de desarrollo que has comentado desde el gestor de paquetes (libmesh) y ya no aparece el mismo error, ahora pide una libreria diferente, aqui posteo el log:

linux@linux-desktop:~/illinois$ make -f Makefile.dat
g++ -o remesh remesh.o texgui.o -g -O2 -Wall -Wno-sign-compare -I/home/linux/illinois/libgfx-1.1.0/libgfx-1.1.0/include -DHAVE_CONFIG_H -I/home/linux/illinois/libmesh/include -I/home/linux/illinois/SuperLU/SRC -L/home/linux/illinois/libgfx-1.1.0/libgfx-1.1.0/src -L/home/linux/illinois/libmesh/src -L/home/linux/illinois/SuperLU -lmesh -lgfx -lfltk -lX11 -lXext -lm
/usr/bin/ld: cannot find -lgfx
collect2: ld returned 1 exit status
make: *** [remesh] Error 1
linux@linux-desktop:~/illinois$

¿como has visto que necesitaba instalar el libmesh?
¿como veo cuál es la que me falta ahora?

muchas gracias.
Avatar de Usuario
hipersayan_x
Forista Legendario
Forista Legendario
Mensajes: 1905
Registrado: Vie Abr 27, 2007 7:00 am
Contactar:

Re: Compilar programa c++

Mensaje por hipersayan_x » Lun May 10, 2010 6:14 pm

adbaco escribió: ¿como has visto que necesitaba instalar el libmesh?

Código: Seleccionar todo

/usr/bin/ld: cannot find -lmesh
collect2: ld returned 1 exit status
make: *** [remesh] Error 1
adbaco escribió: ¿como veo cuál es la que me falta ahora?

Código: Seleccionar todo

/usr/bin/ld: cannot find -lgfx
collect2: ld returned 1 exit status
make: *** [remesh] Error 1
Desarrollo en Qt: Qt Developer Network
Mis proyectos: github | SourceForge.net
adbaco
Forista Nuevo
Forista Nuevo
Mensajes: 11
Registrado: Mar Mar 23, 2010 9:13 pm

Re: Compilar programa c++

Mensaje por adbaco » Lun May 10, 2010 6:36 pm

hola hipersayan, gracias por el comentario, entonces deduzco que me falta la libreria libgfx, debido a que esta librería no estaba en el gestor de paquetes en su día me la descargué de internet (http://mgarland.org/software/libgfx.html) la descomprimí y la puse donde el makefile.

Porque no la encuentra? Debo instalarla por separado o algo?
Avatar de Usuario
hipersayan_x
Forista Legendario
Forista Legendario
Mensajes: 1905
Registrado: Vie Abr 27, 2007 7:00 am
Contactar:

Re: Compilar programa c++

Mensaje por hipersayan_x » Lun May 10, 2010 6:57 pm

adbaco escribió: entonces deduzco que me falta la libreria libgfx
Evidentemente mi querido Watson
adbaco escribió: debido a que esta librería no estaba en el gestor de paquetes en su día me la descargué de internet (http://mgarland.org/software/libgfx.html)
Bien

Código: Seleccionar todo

apt-cache search libgfx

o

apt-cache search gfx
Mejor
adbaco escribió: la descomprimí y la puse donde el makefile.
Mal
adbaco escribió: Porque no la encuentra? Debo instalarla por separado o algo?
Desarrollo en Qt: Qt Developer Network
Mis proyectos: github | SourceForge.net
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Compilar programa c++

Mensaje por akodo » Mar May 11, 2010 11:26 am

Lo mejor es que busques las librerías en los repositorios, e instales tanto la librería como el paquete de desarrollo. En el caso de que no la encuentres, lo más probable es que en la página desde donde descargastes el programa "principal" tengas algún enlace a las librerías. Al menos es lo deseable. De no ser así las tendrás que buscar por tu cuenta.

Por lo general, y salvo que te indiquen lo contrario, las librerías se instalan de las misma forma que se instalan los programas desde el código fuente: configure, make y make install. Eso te debería instalar la librería en el sitio correspondiente.
Si para instalar una librería necesitas a su vez otras librerías, simplemente haz lo mismo.

Lo único que creo que te queda por hacer es comprobar si tienes las librerías necesarias (libfltk, libX11, libXext, libm) e instalarlas si no es así.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Avatar de Usuario
shicefgo
Forista Menor
Forista Menor
Mensajes: 53
Registrado: Lun May 10, 2010 1:00 am
Ubicación: Andalucía

Re: Compilar programa c++

Mensaje por shicefgo » Mar May 11, 2010 12:12 pm

Hola.
Para enlazar una biblioteca y sus archivos de cabecera, para el compilador gcc o g++ se suele hacer así:

Para los archivos de cabecera (los .h normalmente):
Supongamos que están en la carpeta /home/yo/programas/estemismo, pues sería añadirle a la línea de órdenes para la compilación:
-I/home/yo/programas/estemismo (-I = -i mayúscula)
Naturalmente, en el código fuente tendrá que haber un #include "/path/bibli.h" o #include <bibli.h>.

Para las bibliotecas (o librerías):
Supongamos que la biblioteca a enlazar se llama libbibli y está en /home/yo/biblios/estamisma, pues añadiríamos a la línea de órdenes:
-L/home/yo/biblios/estamisma -lbibli (-l = -ele minúscula). No hay que poner el prefijo 'lib' en el nombre de la biblioteca.

Esto se puede hacer al ejecutar ./configure y pasándole algunos parámetros (./configure --help), pero por lo que veo compilas con make -f Makefile.dat. Eso es nuevo para mí en Linux, yo conozco (más o menos) el sistema clásico del ./configure, make y make install. (¿No tendrás un archivo llamado configure en la carpeta raíz de los fuentes?)

Otra solución algo chapucera, pero para salir del paso, es crearte unos enlaces simbólicos en los directorios donde gcc busca las cabeceras y las librerías por defecto. Estos suelen ser /usr/include para las cabeceras y /usr/lib para las bibliotecas, aunque yo preferiría /usr/local/include y /usr/local/lib.
Para los enlaces simbólicos es muy útil el siguiente comando: man ln (ln -s archivo_original nombre_del_enlace).

Saludos.
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje