Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: SiPoX en 15 de Octubre de 2005, 07:45:43 PM

Título: Dev-cpp Y Librerías Propias
Publicado por: SiPoX en 15 de Octubre de 2005, 07:45:43 PM
 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! ;) :)
Título: Dev-cpp Y Librerías Propias
Publicado por: ALRAZ en 16 de Octubre de 2005, 05:32:43 AM
 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
Título: Dev-cpp Y Librerías Propias
Publicado por: TheAzazel en 17 de Octubre de 2005, 11:19:49 AM
 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
Título: Dev-cpp Y Librerías Propias
Publicado por: SiPoX en 17 de Octubre de 2005, 11:50:33 AM
 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! ;) :)