Je crée une bibliothèque partagée C++ et quand je compile un exe principal qui utilise la bibliothèque, le compilateur me donne:
main.cpp:(.text+0x21): undefined reference to `FooClass::SayHello()'
collect2: ld returned 1 exit status
Code bibliothèque:
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";
}
Compilation avec:
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;
}
Compilation avec:
g++ -I. -L. -lfoo main.cpp -o main
La machine est un Ubuntu Linux 12
Merci!
g++ -I. -L. -lfoo main.cpp -o main
c'est le problème. Les versions récentes de GCC nécessitent que vous placiez les fichiers objets et les bibliothèques dans l'ordre où ils dépendent les uns des autres - en règle générale, vous devez placer les indicateurs de bibliothèque comme dernier commutateur pour l'éditeur de liens; je. e., écrire
g++ -I. -L. main.cpp -o main -lfoo
au lieu.