Robię C++ Shared Library i kiedy mogę skompilować główny exe, który wykorzystuje bibliotekę kompilator daje mi:C++ biblioteki współdzielonej niezdefiniowana odniesienia do `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";
}
Kompilacja z:
g++ -shared -fPIC fooclass.cpp -o libfoo.so
Menem: 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;
}
Kompilacja z:
g++ -I. -L. -lfoo main.cpp -o main
Maszyna jest Linux Ubuntu 12
Dzięki!
Biblioteki na końcu komendy kompilatora. Zobacz http://stackoverflow.com/questions/9966959/noobish-linker-errors-when-compiling-against-glib/9966989#9966989 – hmjd
Nie pisz do strażników (lub innych nazw), które zawierają dwa podkreślenia lub zaczynają się od podkreślenie poprzedzone wielką literą. Te nazwy są zarezerwowane dla implementacji. (To prawdopodobnie nie ma nic wspólnego z właściwą odpowiedzią na pytanie) –
@close voters: Myślę, że to pytanie jest lepsze od drugiego (po pierwsze, tytuł nie jest opisowy, a po drugie, tamten ma tonę obcej śmieci) – Wug