Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





[SOLVED] Estoy desesperado! undefined refence con librerias estáticas

Iniciado por Prompt, 19 de Enero de 2009, 02:21:06 AM

« anterior - próximo »

Prompt

Hola a todos... llevo toda la semana horas y horas buzeando por internet...

Estoy compilando el motor en Linux con GCC y compila todo perfectamente, pero... al "linkar" obtengo "unresolved external" por todas partes... estoy desesperado de preguntar por todas partes y buscar por google, es imposible que no se puedan tener en un proyecto librerias staticas cruzadas etc.



Building target: kk
Invoking: GCC C++ Linker
g++ -L"/home/prompt/workspace/NSSEngine/trunk/Code/_Libs/lua-5.1.1/Debug Linux" -L"/home/prompt/workspace/NSSEngine/trunk/Code/AI/Debug Linux" -L"/home/prompt/workspace/NSSEngine/trunk/Code/UI/Debug Linux" -L"/home/prompt/workspace/NSSEngine/trunk/Code/Math/Debug Linux" -L"/home/prompt/workspace/NSSEngine/trunk/Code/Core/Debug Linux" -L"/home/prompt/workspace/NSSEngine/trunk/Code/Effects/Debug Linux" -L"/home/prompt/workspace/NSSEngine/trunk/Code/Game/Debug Linux" -L"/home/prompt/workspace/NSSEngine/trunk/Code/Network/Debug Linux" -L"/home/prompt/workspace/NSSEngine/trunk/Code/Objects/Debug Linux" -L"/home/prompt/workspace/NSSEngine/trunk/Code/Scene/Debug Linux" -L"/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux" -o"kk"  ./src/kk.o   -lGL -lGLU -lglut -lGLEW -lLUA5 -lMath -lUI -lScript -lAI -lScene -lObjects -lNetwork -lGame -lEffects -lCore -lAI
/home/prompt/workspace/NSSEngine/trunk/Code/UI/Debug Linux/libUI.a(Camera.o): In function `Camera::updateViewMatrix()':
/home/prompt/workspace/NSSEngine/trunk/Code/UI/Debug Linux/../Cameras/Camera.cpp:734: undefined reference to `Quaternion::toMatrix4() const'
/home/prompt/workspace/NSSEngine/trunk/Code/UI/Debug Linux/libUI.a(Camera.o): In function `Camera::lookAt(Vector3 const&, Vector3 const&, Vector3 const&)':
/home/prompt/workspace/NSSEngine/trunk/Code/UI/Debug Linux/../Cameras/Camera.cpp:127: undefined reference to `Quaternion::fromMatrix(Matrix4 const&)'
/home/prompt/workspace/NSSEngine/trunk/Code/UI/Debug Linux/libUI.a(Camera.o): In function `Camera::setOrientation(Quaternion const&)':
/home/prompt/workspace/NSSEngine/trunk/Code/UI/Debug Linux/../Cameras/Camera.cpp:488: undefined reference to `Quaternion::toMatrix4() const'
/home/prompt/workspace/NSSEngine/trunk/Code/UI/Debug Linux/libUI.a(Camera.o): In function `Math::closeEnough(float, float)':
/home/prompt/workspace/NSSEngine/trunk/Code/Math/mathlib.h:97: undefined reference to `Math::EPSILON'
/home/prompt/workspace/NSSEngine/trunk/Code/UI/Debug Linux/libUI.a(Camera.o): In function `Math::degreesToRadians(float)':
/home/prompt/workspace/NSSEngine/trunk/Code/Math/mathlib.h:102: undefined reference to `Math::PI'
/home/prompt/workspace/NSSEngine/trunk/Code/UI/Debug Linux/libUI.a(Camera.o): In function `Math::radiansToDegrees(float)':
/home/prompt/workspace/NSSEngine/trunk/Code/Math/mathlib.h:150: undefined reference to `Math::PI'
/home/prompt/workspace/NSSEngine/trunk/Code/UI/Debug Linux/libUI.a(Camera.o): In function `Quaternion::fromHeadPitchRoll(float, float, float)':
/home/prompt/workspace/NSSEngine/trunk/Code/Math/mathlib.h:1673: undefined reference to `Matrix3::fromHeadPitchRoll(float, float, float)'
/home/prompt/workspace/NSSEngine/trunk/Code/Math/mathlib.h:1674: undefined reference to `Quaternion::fromMatrix(Matrix3 const&)'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/libScript.a(ScriptTable.o): In function `ScriptTable::addParams(lua_State*)':
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:947: undefined reference to `lua_gettop'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:953: undefined reference to `lua_type'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:963: undefined reference to `lua_tolstring'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:971: undefined reference to `lua_toboolean'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:979: undefined reference to `lua_tonumber'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:987: undefined reference to `lua_tocfunction'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:1003: undefined reference to `lua_touserdata'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/libScript.a(ScriptTable.o): In function `ScriptTable::initFromStack(lua_State*)':
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:1036: undefined reference to `lua_gettop'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:1037: undefined reference to `lua_type'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/libScript.a(ScriptTable.o): In function `ScriptTable::addSubTable(lua_State*)':
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:789: undefined reference to `lua_gettop'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:790: undefined reference to `lua_pushnil'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:792: undefined reference to `lua_type'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:806: undefined reference to `lua_type'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:807: undefined reference to `lua_type'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:812: undefined reference to `lua_tonumber'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:815: undefined reference to `lua_tolstring'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:821: undefined reference to `lua_tonumber'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:825: undefined reference to `lua_toboolean'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:829: undefined reference to `lua_tolstring'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:833: undefined reference to `lua_tocfunction'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:839: undefined reference to `lua_tolstring'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:845: undefined reference to `lua_tolstring'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:848: undefined reference to `lua_settop'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:797: undefined reference to `lua_next'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/libScript.a(ScriptTable.o): In function `ScriptTable::addVars(lua_State*)':
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:857: undefined reference to `lua_gettop'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:863: undefined reference to `lua_type'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:864: undefined reference to `lua_tolstring'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:881: undefined reference to `lua_tolstring'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:889: undefined reference to `lua_toboolean'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:897: undefined reference to `lua_tonumber'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:905: undefined reference to `lua_tocfunction'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:921: undefined reference to `lua_touserdata'
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/libScript.a(ScriptTable.o): In function `ScriptTable::toStringSubTable(unsigned int, unsigned int, bool, bool)':
/home/prompt/workspace/NSSEngine/trunk/Code/Script/Debug Linux/../ScriptTable.cpp:180: undefined reference to `lua_pushlightuserdata'
collect2: ld returned 1 exit status
make: *** [kk] Error 1



Por ejemplo en la libreria de LUA "nm" me dice esto:

prompt@linux-y9y2:~/workspace/NSSEngine/trunk/Bin> nm ../Code/_Libs/lua-5.1.1/Debug\ Linux/libLUA5.a | grep gettop
00000385 T lua_gettop
         U lua_gettop
         U lua_gettop
         U lua_gettop
         U lua_gettop
         U lua_gettop
         U lua_gettop
         U lua_gettop
         U lua_gettop
00000385 T lua_gettop


y Script que es donde da el problema con que no está definido lua_gettop:

prompt@linux-y9y2:~/workspace/NSSEngine/trunk/Bin> nm ../Code/Script/Debug\ Linux/libScript.a | grep gettop
         U lua_gettop
         U lua_gettop


Por la santisima madre de todos los codigos y programadores de este foro, ayudadme necesito dormir!!!!!!!!!!!!!!!!!!!!  :-[

Prompt

El problema está en llamar desde una librería estática funciones de otra... yo no me lo explico. :grrr:

tewe76

¿El segundo mensaje significa que lo has solucionado? ???
Si es así, efectívamente necesitabas dormir :P
Tewe
www.TAPAZAPA.com : Funny and easy to play games for all ages! - Fairy Match - Brain Crash
www.LaRebelionDelBiberon.com : Experiencias de unos padres primerizos

Prompt

No, no lo he solucionado, solo identifico el problema...

Mi Arbol de proyectos es tal que así:
- AI
- Core
- Effects
- Game
- lua-5.1.1
- Math
- Network
- Objects
- Physics
- Scene
- Script
- Sound
- UI
- Viewer (exe)

Todos los librerias estaticas, y si por ejemplo UI, necesita Math::PI (static const float) me dice "unresolved external". Cuando encuentre a quien inventó el linker de GCC lo mato... para que **** existen entonces las librerias estaticas?, en el proyecto están todas las referencias bien definidas etc...

ethernet


Prompt

Justo eso intento, aunque en linux ya lo intenté desde el makefile y nada.


ethernet


senior wapo

¿Estas poniendo las librerisa en el orden adecuaod al linkar?

El linker de GNU es de una sola pasada y solo hace caso de los nombres que hayan sido referenciados previamente por otras librerias y objetos al linkar.

Si pones -llua antes de -lscript te mostrara unresolveds pero si pones -lscript -llua funcionara.

Supogo que las rutas donde mirar las librerias estan todas correctas ¿verdad?

Mira a ver si es algo de eso.

Prompt

Cita de: ethernet en 19 de Enero de 2009, 07:35:24 PM
Cita de: Prompt en 19 de Enero de 2009, 06:15:04 PM
de momento -static no funciona

Aunque no funcione, te saca los mismos undefined?

Si pero, no me fio ya de nada, lo he intentado por activa y por pasiva. Lo digo porque al probe a compilar Math en dinamico con otro proyecto->Math2, y se quitaron los herrores referentes a esa libreria y ocupada 1.8MB, volvi a activarlo en estatico y a parte de que es poco tamaño no salian los errores! no me lo creía claro... recompile, revise todo, clean yo que se! y volvieron a aparecer.


Prompt

Cita de: senior wapo en 20 de Enero de 2009, 01:58:33 AM
¿Estas poniendo las librerisa en el orden adecuaod al linkar?

El linker de GNU es de una sola pasada y solo hace caso de los nombres que hayan sido referenciados previamente por otras librerias y objetos al linkar.

Si pones -llua antes de -lscript te mostrara unresolveds pero si pones -lscript -llua funcionara.

Supogo que las rutas donde mirar las librerias estan todas correctas ¿verdad?

Mira a ver si es algo de eso.

Probé a jugar con el orden, incluso a petetir todos los -l por si acaso. Y nada. Si, las rutas son las correctas, sino me suele salir "no cuentro -lScene" por ejemplo.

Prompt

Ayer probé a la desesperada, a hacer "links" de directorios dentro del proyecto "kk" (de test claro) y bueno aun no lo he compilado todo, pero estoy seguro de que así funcionará. No obstante, no es la manera "standard" y quiero intentar no hacerlo claro...

Re-probaré con el orden, desde 0 con pocas librerias ya que el proyecto "kk" es para ensuciar, es una simple ventana de glut. Ya os contaré mis avances.

Un saludo a todos, y gracias por el interés.

Prompt

Alguien podria decirme algun comando / programa que detecte si hay dependencias cruzadas entre librerias?
Lo mismo es mi problema y el linker no lo detecta... es una posibilidad.

Prompt

Una vez resueltas las referencias cruzadas, y bien ordenadas las librerias... nada. Usando -static tampoco.

Menuda mierda de GCC en el año 2009 linkando con librerias estaticas. Posiblemente sea más culpa del quien genera el Makefile... pero es que todo esto me parece increible...

fjfnaranjo

Cita de: Prompt en 20 de Enero de 2009, 02:28:34 PM
Cuando encuentre a quien inventó el linker de GCC lo mato... para que **** existen entonces las librerias estaticas?

Menuda mierda de GCC en el año 2009 linkando con librerias estaticas...

¿Tienes algo en contra de GCC?

Si lo tienes, por favor, aporta algo que no sea solo un insulto...

A ver si ahora todo tiene que ser como quieran los compiladores de Microsoft, y la gente de *nix y Mac son unos inútiles...
fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.