[C con Clase] Pregunta Newbie con respecto a CMake

Steven Davidson srd4121 en njit.edu
Mie Nov 30 14:26:11 CET 2011


Hola Asdrúbal,

2011/11/30 Asdrúbal Iván Suárez Rivera <asdrubal.ivan.suarez.rivera en gmail.com>:
> Tengo una pequeña duda usando el programa CMake, resulta que tengo 3
> archivos, llamados
>
> main.cpp
> foo.h
> foo.cpp
>
> Me gustaría saber como puedo yo hacer que se me compile un archivo foo.o y
> se enlace con un main.o, para que no el g++ no me dé un error del tipo
> "undefined reference" al llamar alguna función desde el main que está
> declarada en foo.h y definida en foo.cpp
>

Si el compilador/enlazador, "g++", te lanza un error, entonces
deberías hacer caso de tal error y no intentar eludirlo. Este tipo de
mensaje es del enlazador, ya que no encuentra la función que quieres
usar. Sin ver el código fuente, no te puedo decir si has cometido un
error o no. Es posible que el prototipo en "foo.h" no es idéntico a la
implementación en "foo.cpp". Por ejemplo,

// foo.h

int suma( int, int );


// foo.cpp

#include "foo.h"

float suma( float a, float b )
{
  return a+b;
}

Y luego, en "main.cpp":

#include <iostream>
#include "foo.h"

int main()
{
  std::cout << suma( 4, 2 ) << std::endl;

  return 0;
}

Aquí, el enlazador te marcará un error de un uso o referencia sin
definir para 'suma(int,int)'. El compilador no te marca ningún error,
porque gramaticalmente todo es correcto, pero lógicamente no, ya que
'float suma( float, float )' no es lo mismo que 'int suma( int, int
)'.


Espero que esto te oriente.

Steven




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