elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Sistemas Operativos
| |-+  GNU/Linux (Moderador: MinusFour)
| | |-+  Problemas con el linker
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con el linker  (Leído 3,238 veces)
El_Java

Desconectado Desconectado

Mensajes: 144



Ver Perfil WWW
Problemas con el linker
« en: 2 Julio 2012, 17:25 pm »

Hola a todos.
He estado instalando las librerias Ogre3D y todas las inmensas dependencias que tiene esta librería gráfica, al final del proceso traté de compilar un código de prueba y no he podido. El problema está en el linker ya que me da diversos errores del tipo "Undefined reference to...".
No es la primera vez que tengo problemas con el linker, así que lo que hice fue añadir la ruta de las librerias al linker para que las encontrase, lo hice con las de Ogre (que había instalado directamente desde el codigo fuente). Pero luego también tuve que hacerlo con la libreria OIS (la cual había instalado mediante los repositorios de Ubuntu, ya sabeis: sudo apt-get install ___), y eso ya me empezó a mosquear. Ahora me dice que el linker tampoco encuentra las librerias de X11 y ya empiezo a pensar que el problema puede estar en el linker, porque no son normales tantos problemas....

¿Alguna idea?

Un saludo


En línea

Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: Problemas con el linker
« Respuesta #1 en: 3 Julio 2012, 04:55 am »

¿Qué te sale en las undefined reference? por otro lado MUY MAL eso de instalar manualmente ... ya que esa instalación vá a dejar residuos que pueden corromper lo que el gestor de paquetes o futuras instalaciones manuales puedan agregar.
Si todavía tenés el Makefile desde el que corriste el make install, corré make uninstall (o deinstall, siempre se me transpapela en la cabeza) y forzá re-instalación de los paquetes de Ogre y OIS (los -dev también) vía gestor de paquetes.

Compilá este código (que es un código MÍNIMO de Ogre) : http://foro.elhacker.net/programacion_cc/ogre3d_en_dev_c-t243920.0.html;msg1173366#msg1173366  ←Qué asco ese código, se hace el agnóstico de la plataforma cuando no lo es !! x')
Pero usando g++ directamente

Código
  1. g++ -lOgre Fichero.cpp # u -lOgreMain si esto no funciona

Si compila, la instalación y el linker está bien ... estás configurando mal el proyecto

Saludos.


« Última modificación: 3 Julio 2012, 05:01 am por vertexSymphony » En línea

El_Java

Desconectado Desconectado

Mensajes: 144



Ver Perfil WWW
Re: Problemas con el linker
« Respuesta #2 en: 3 Julio 2012, 17:54 pm »

Gracias por la ayuda, he borrado y reinstalado las librerias de la manera que tu me has dicho y he conseguido que me compile varios codigos de ese post sin problemas usando:
Código
  1. g++ -lOgreMain Fichero.cpp
Pero luego he intentado ejecutar el archivo para ver como funciona y me da un error Ogre3d, te lo copio aqui:
Código:
Loading library RenderSystem_Direct3D9
terminate called after throwing an instance of 'Ogre::InternalErrorException'
  what():  OGRE EXCEPTION(7:InternalErrorException): Could not load dynamic library RenderSystem_Direct3D9.  System Error: RenderSystem_Direct3D9.so: cannot open shared object file: No such file or directory in DynLib::load at /build/buildd/ogre-1.7.4/OgreMain/src/OgreDynLib.cpp (line 91)
Abortado (`core' generado)

¿Cuál puede ser el problema? He cambiado para que cargase OpenGl pero el fallo ha sido similar...
En línea

Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: Problemas con el linker
« Respuesta #3 en: 3 Julio 2012, 18:46 pm »

Todo en orden entonces, ese código es un horror, por que no es portable para nada (es esperable que falle, por que está programado para preferir Direct3D en una plataforma donde no existe) ... en esos oscuros tiempos programaba sólo sobre Windows (principalmente por el Cg studio y otras tools que ahora reemplazé) , y como deducirás, sobre Visual Studio.
Ahora, si tuviese que reformularte ese post y código para que testees Ogre, lo haría así:

Como uso Debian y no quiero poner el path completo a RenderSystem_GL, simplemente le hago un enlace simbólico en el directorio actual, en mi caso:

Código
  1. ln -s /usr/lib/x86_64-linux-gnu/OGRE-1.7.4/RenderSystem_GL.so ./

Test.cxx
Código
  1. #include <Ogre.h>
  2.  
  3. #define RENDERSYSTEM_GL "./RenderSystem_GL"
  4. #define RENDERSYSTEM_GL_NAME "OpenGL Rendering Subsystem"
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8. Ogre::Root* Root = new Ogre::Root("",""); // omitimos el archivo de plugin y config
  9.  
  10. Root->loadPlugin(RENDERSYSTEM_GL);
  11.  
  12. // Tomemos OpenGL como preferido ...
  13. Ogre::RenderSystem* RenderSystem  = Root->getRenderSystemByName(RENDERSYSTEM_GL_NAME);
  14.  
  15. // Seteemos el RenderSystem
  16. Root->setRenderSystem(RenderSystem);
  17. // Inicializemos el RenderSystem sin crear una ventana de render
  18. Root->initialise(false);
  19.  
  20. // Creemos la ventana de render a 800x600 Windowed mode
  21. Ogre::RenderWindow* Window = Root->createRenderWindow("Ejemplo",800,600,false);
  22.  
  23. // Listo, Tenemos Una Aplicación Ogre Inicializada =3
  24. // Creemos lo básico para una escena
  25.  
  26. Ogre::SceneManager* SceneMgr = Root->createSceneManager(Ogre::ST_GENERIC); // Esto del Type mask se desaconseja ! ~ un Scene Manager Basico
  27. Ogre::Camera* Cam = SceneMgr->createCamera("MainCamera");  // Creamos una camara
  28. Ogre::Viewport* Vp = Window->addViewport(Cam); // Un viewport en la ventana Window, usando Cam como origen desde donde se va a renderizar
  29.  
  30. // Listo, Inicializado
  31. // Entremos en un bucle de render infinito ....
  32.  
  33. Root->startRendering();
  34. delete Root; // es lo mismo, total, está el return, pero igual lo pongo
  35.  
  36. return 0;
  37.  
  38. }
  39.  

Código
  1. clang++ -lOgreMain Test.cxx -I/usr/include/OGRE -o ./Test #g++ o loquesea, la cosa es compilar, pasar librería y que encuentre el header
Con eso testeás que la app. se compile y ejecute, aunque en tu caso ya compiló, significa que está todo ok mientras tengas la aceleración funcionando.

Ahora, si me pedís la respuesta "correcta", no inicializaría así a Ogre, sino más bien usaría ayuda de cmake para armar un módulo que lidie con tema encabezados y librerías de forma portable a través de las plataformas, si bien puede hacerse con un IDE portable como Code::Blocks, los paths no siempre son los mismos (cmake lidia con eso) ... sobre eso algún script (guarda con el sentido en el que lo uso !!!) de inicialización que lidie con todas estas cochinadas de los plugins, rendersystems y demás temas de inicialización de forma elegante...

Saludos.
« Última modificación: 3 Julio 2012, 18:48 pm por vertexSymphony » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Help, porfa: [Linker error] undefined reference to '.......
ASM
codeliber 5 8,743 Último mensaje 3 Octubre 2009, 00:26 am
por Eternal Idol
Duda sobre linker
Programación C/C++
criskapunk 2 3,796 Último mensaje 25 Marzo 2011, 05:23 am
por D4RIO
Linker en VC++
Programación C/C++
eleon 0 1,454 Último mensaje 24 Julio 2012, 15:16 pm
por eleon
Problema con linker script
Programación General
Khronos14 4 3,169 Último mensaje 6 Septiembre 2012, 15:16 pm
por Khronos14
SDL: ERROR EN LINKER
Programación C/C++
Puntoinfinito 2 2,701 Último mensaje 12 Noviembre 2012, 20:30 pm
por NeoB
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines