Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Dev-cpp Y Librerías Propias

Iniciado por SiPoX, 15 de Octubre de 2005, 07:45:43 PM

« anterior - próximo »

SiPoX

 Wenas amigos!

Os cuento...

Deseo crear una librería estática propia, con funciones y tal. Eso ya lo tengo, tengo el .h con los prototipos, definiciones..., el .cpp con las funciones i el .a ya compilado sin errores.

El problema lo tengo al llamar a funciones de esa librería desde cualquier programa.

Uso Dev-cpp, en un archivo .cpp de un proyecto, indico la cabecera como las de sistema (#include ) (copié el .h a la carpeta include del devcpp i el .a a la carpeta lib.. y la libreria se llama libsdlras.a) y dentro del programa llamo a una función de la librería. Al compilar, me dice "linker error: undefined reference to Suma", siendo Suma dicha función.

He probado a indicar -lsdlras en las opciones del compilador y en las opciones del proyecto, pestaña parámetros, cajita de linker. Pero me da exactamente el mismo error. He revisado todo, he buscado por internete, por aquí.. pero sigo sin saber que falla. :S

pd.- otra cosa relacionada con el dev-cpp. En el apartado de opciones del compilador... he creado varios compiladores... con la intención de usar uno u otro según los comandos del linker a usar.. pero siempre me coje el mismo, el de defecto, aunque indique lo contrario seleccionando otro compilador i aceptando. Como se cambia esto entonces? Me estoy rayando, pues no veo ninguna otra opción :S

Saludos! ;) :)
gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)

ALRAZ

 será que el .a no está en el directorio lib?
o que no exportaste la función con __declspec(dllexport) ?

o tal vez sea la alineación de los planetas...
en windows nunca se sabe

TheAzazel

 Sobre la funcion Suma() que no encuentra.... veras, creo que si no encontrar tu lib(libsdlras.a) el error seria que no encuentra ese fichero...luego el problema no es que no este linkando contra tu lib(si la has copiado al /lib del compilador...con el parametro -lsdlras efectivamente la estas llamando) si no que podria venir de esto otro... la lib esta en C o C++? y tu codigo...el del programa que intentas linkar...es C o C++?.

Si por ejemplo, tu libreria esta en C y tu programa en C++, tienes que indicar en el header donde declaras las funciones de tu lib lo siguiente:

#ifdef CPLUSPLUS
extern "C"
{
#endif
// todos los prototipos de tus funciones...

#ifdef CPLUSPLUS
}
#endif


Lo del declspec se utiliza para librerias dinamicas o shared, como las quieras llamar, y no tiene sentido ni aplicacion en las lib estaticas..de hecho... si las declaras con el declspec y utilizas luego en estatico..te dara errores de linkado...

Ya diras si arreglo esto algo, saludos

SiPoX

 Buenas!

TheAzazel, debía ser algo así... probando i probando... pase la librería a código c++, i logré que funcionase. ;) :)

En este caso me daba igual ke la lib estuviera en c o c++,  pero para kuando tenga ke estar en C ya se por donde tengo ke tirar, gracias! ;) :)

Y por curiosidad.. al revés tb funcionaría? quiero decir si un programa escrito en C, podría usar una librería programada en C++?

Saludos! ;) :)

gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)






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.