estoy haciendo una biblioteca compartida de C++ y cuando compilo un exe principal que utiliza la biblioteca del compilador me da:C++ biblioteca compartida referencia indefinida a `FooClass :: SayHello()'
main.cpp:(.text+0x21): undefined reference to `FooClass::SayHello()'
collect2: ld returned 1 exit status
código de la biblioteca :
fooclass.h
#ifndef __FOOCLASS_H__
#define __FOOCLASS_H__
class FooClass
{
public:
char* SayHello();
};
#endif //__FOOCLASS_H__
fooclass.cpp
#include "fooclass.h"
char* FooClass::SayHello()
{
return "Hello Im a Linux Shared Library";
}
Compilar con:
g++ -shared -fPIC fooclass.cpp -o libfoo.so
principal: main.cpp
#include "fooclass.h"
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
FooClass * fooClass = new FooClass();
cout<< fooClass->SayHello() << endl;
return 0;
}
Compilar con:
g++ -I. -L. -lfoo main.cpp -o main
La máquina es un Ubuntu Linux 12
Gracias!
Bibliotecas al final del comando del compilador. Consulte http://stackoverflow.com/questions/9966959/noobish-linker-errors-when-compiling-against-glib/9966989#9966989 – hmjd
No escriba incluya guardias (u otros nombres) que contengan dos guiones bajos o comience con un guión bajo seguido de una letra mayúscula. Esos nombres están reservados a la implementación. (Esto probablemente no tiene nada que ver con la respuesta correcta a la pregunta) –
@close votantes: creo que esta pregunta es mejor que la otra (primero que nada, el título no es descriptivo, y el segundo de todos, el otro tiene una tonelada de basura extraña) – Wug