Re: Problème de compilation / dlsym

トップ ページ

このメッセージに返信
著者: Frédéric
日付:  
To: ML Guilde
題目: Re: Problème de compilation / dlsym
On Lundi 13 Mars 2006 19:06, Edgar Bonet wrote:

> Bon, visiblement le C et le C++ c'est pas pareil sur ce point. Moi je
> suis C, mais j'ai essayé de jouer avec le compilo C++ (g++ 3.4.1).


Comme dit dans mon précédent courriel, ça compile bien avec g++-3.3. Pas
avec le 3.4 ?

>     (void *) m_TestRecAlignment = dlsym(m_libt, "TestRecAlignment");

>
> donne
>
>     error: ISO C++ forbids cast to non-reference type used as lvalue

>
> C'est en gros le message d'erreur que tu avais, en plus clair. Si
> j'enlève le cast à gauche :
>
>     error: invalid conversion from `void*' to `bool (*)(TModuleRec*)'

>
> OK, je remets le cast, mais à droite, comme tout le monde, et là il est
> content. Après tout c'est plus logique de caster la valeur au type de la
> variable d'accueil que le contraire. Donc, le code qui plaît à g++ :
>
>     m_libt = dlopen(TOKENIZER_SO, RTLD_LAZY);
>     if (m_libt) {
>         m_TestRecAlignment = (bool (*)(TModuleRec *))
>             dlsym(m_libt, "TestRecAlignment");
>         m_Compile = (bool (*)(TModuleRec *, char*, bool, bool))
>             dlsym(m_libt, "Compile");
>         m_Version = (byte (*)()) dlsym(m_libt, "Version");
>     }

>
> Si tu ne trouves pas ça très lisible (normal si tu as pas bu le C au
> biberon), fais des typedefs pour ces types de fonctions.


Fouillaillailla ! Faut tout recaster dans tous les sens, quoi.

J'ai bu du C au biberon, mais sans abuser, et je suis rapidement passé à
une boisson de grand : le python ;o)

Merci pour les explications !

--
Frédéric

http://www.gbiloba.org