[C con Clase] Crear una librería estática

Steven Richard Davidson stevenrichard.davidson en gmail.com
Mie Dic 12 16:39:17 CET 2007


Hola Dani,

On Dec 12, 2007 1:28 PM, dani <ddagnino en gmail.com> wrote:
> Hola a todos,
> antes de nada gracias Steven por la ayuda aunque todavía persiste el problema. Te cuento por si me quieres dar alguna otra idea.
> He hecho lo de incluir el #include "complejos.h" sin la dirección del archivo. Lo de decirle al enlazador donde estaba la librería libcomplejos.a ya lo estaba haciendo. Pero con este nuevo cambio obtengo los mismos errores que antes.
>

Bien. Me he puesto a hacer algunas pruebas, y he visto que estás
definiendo y usando funciones globales en línea o in situ (inline). Ha
sido un despiste mío, pero no me fijé muy bien la primera vez al ver
tu código que estabas usando funciones en línea.

La cuestión es que las funciones en línea tienen un enlazamiento
interno. He aquí el problema que te marca el enlazador. Básicamente,
esas funciones en línea no pueden ser compartidas con otros ficheros
objetos, pero sí internamente, en el mismo fichero objeto.

Todo esto significa que tienes que declarar y definir las funciones en
línea simultáneamente. Esto implica que no puedes separar la
declaración de su definición. El resultado es el siguiente:

// "complejos.h"

// Estructura.
struct complejo {double a,b;};

// Prototipo del operador + para complejos.
inline complejo operator+( complejo x, complejo y )
{
  complejo temp = {x.a+y.a, x.b+y.b};
  return temp;
}

// Funciones para complejos.
inline double real( complejo z )  { return z.a; }
inline double imag( complejo z )  { return z.b; }


Por cierto, sugiero usar directivas del precompilador para asegurar
una única inclusión de este fichero en un proyecto. El esquema vendría
a ser el siguiente:

#ifndef _COMPLEJOS_H_
#define _COMPLEJOS_H_
.
.
.
#endif


Espero que todo esto aclare la duda.

Steven




Más información sobre la lista de distribución Cconclase