web-dev-qa-db-fra.com

Référence non définie de la bibliothèque partagée C ++ à `FooClass :: SayHello () '

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!

21
fivunlm
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.

43
user529758