Sto facendo una libreria condivisa C++ e quando compilo un exe principale che utilizza la libreria il compilatore mi dà:C++ libreria condivisa undefined reference to `FooClass :: SayHello()'
main.cpp:(.text+0x21): undefined reference to `FooClass::SayHello()'
collect2: ld returned 1 exit status
Code Library :
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";
}
compilazione con:
g++ -shared -fPIC fooclass.cpp -o libfoo.so
principale: 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;
}
compilazione con:
g++ -I. -L. -lfoo main.cpp -o main
La macchina è un'Ubuntu Linux 12
Grazie!
Librerie alla fine del comando del compilatore. Vedi http://stackoverflow.com/questions/9966959/noobish-linker-errors-when-compiling-against-glib/9966989#9966989 – hmjd
Non scrivere include guardie (o altri nomi) che contengono due caratteri di sottolineatura o iniziano con un trattino basso seguito da una lettera maiuscola. Quei nomi sono riservati all'implementazione. (Questo probabilmente non ha nulla a che fare con la giusta risposta alla domanda) –
@close elettori: Penso che questa domanda sia migliore dell'altra (in primo luogo, il titolo non è descrittivo, e in secondo luogo, l'altro ha un sacco di spazzatura estranea) – Wug