# creer et charger une librairie dylib en c++



## macdav5004 (3 Février 2007)

Bonjour,

Je voudrais creer une librairie de fonctions tres simples (des fonctions retournant des entiers ou des doubles essentiellement, pas d'export de classes ni quoi que ce soit) a partir d'un projet c++, puis les utiliser dans un autre projet en c++. J'ai cherché un peu sur le net mais n'ai pas trouvé qqch qui réponde de maniére simple à ma question.

Est-ce que qqs saurait m'expliquer:

1) comment declarer mes fonctions a exporter (y a t il autres choses à écrire que "extern C")

2) comment charger la librairie pour l'utiliser dans un autre projet c++

Merci d'avance!!


----------



## ntx (4 Février 2007)

macdav5004 a dit:


> Bonjour,
> 1) comment declarer mes fonctions a exporter (y a t il autres choses à écrire que "extern C")


Il me semble que le externe C intervient quand on mélange du C et du C++.  


> 2) comment charger la librairie pour l'utiliser dans un autre projet c++


Une librairie dynamique linkée se charge lors de l'utilisation de l'un de ses symboles.
Si tu veux forcer le chargement d'une librairie autre, il y a la fonction dlopen pour l'ouvrir, et là aussi elle se chargera lors de l'utilisation d'un de ses symboles.


----------



## tatouille (4 Février 2007)

extern c c'est pour surcharger ton c++ avec des methodes c ...

Introduction to C++ Programming I


fais un tour ici

load dynamique d'un shared object


```
#include <iostream>
#include <dlfcn.h>

int main() {
    using std::cout;
    using std::cerr;

    cout << "C++ dlopen demo\n\n";

    // open the library
    cout << "Opening hello.so...\n";
    void* handle = dlopen("./hello.so", RTLD_LAZY);
    
    if (!handle) {
        cerr << "Cannot open library: " << dlerror() << '\n';
        return 1;
    }
    
    // load the symbol
    cout << "Loading symbol hello...\n";
    typedef void (*hello_t)();

    // reset errors
    dlerror();
    hello_t hello = (hello_t) dlsym(handle, "hello");
    const char *dlsym_error = dlerror();
    if (dlsym_error) {
        cerr << "Cannot load symbol 'hello': " << dlsym_error <<
            '\n';
        dlclose(handle);
        return 1;
    }
    
    // use it to do the calculation
    cout << "Calling hello...\n";
    hello();
    
    // close the library
    cout << "Closing library...\n";
    dlclose(handle);
}
```
dlopen

dyld

dlclose

dlsym

dlerror

Creating a shared and static library with the gnu compiler

An Introduction to GCC - for the GNU compilers gcc and g++

* ps sur les forums de code :*
x-man-page:// protocole ::: ca ne serait vraiment pas du luxe ....
au lieu de rajouter la racine http de macg&#233; devant


----------



## p4bl0 (4 Février 2007)

tatouille a dit:


> extern c c'est pour surcharger ton c++ avec des methodes c ...
> 
> Introduction to C++ Programming I
> 
> ...


tiens je ne connaissais pas ce protocole, je viens d'essayer c'est super pratique.

Sur MacG &#231;a serais sympa aussi que le code soit color&#233;, ou alors qu'il y ai un genre de pastebin int&#233;gr&#233;.
Un genre de truc comme &#231;a : http://www.rafb.net/paste/
ou celui l&#224; : http://pastie.caboo.se/

(c'est les deux mieux foutu je trouve).


----------



## tatouille (4 Février 2007)

hop hop


----------



## p4bl0 (5 Février 2007)

tatouille a dit:


> hop hop


C'est tout de suite d'une clart&#233; exquise


----------

