Re: Question de c/cpp

Page principale

Répondre à ce message
Auteur: Patrick Dupre
Date:  
À: guilde
Sujet: Re: Question de c/cpp
Oui,

C'est ce que j'ai fait,
mais il y a quelque chose qui m'echappe.
j'ai cree libludcmp.so

g++ -c ludcmp.cpp -o libludcmp.so -O3 -I ../include/ -fPIC
g++ test.o -L . -lludcmp

Et ca marche.

mais is je fais ensuite
g++ -shared -Wl,-soname,libludcmp.so.1.0 libludcmp.so

cp libludcmp.so.1.0 ../lib/
cd ../lib
ln -s libludcmp.so.1.0 libludcmp.so -f
cd ~
g++ test.o -L ../lib -lludcmp

Ca ne marche pas
a.out: error while loading shared libraries: libludcmp.so.1: only ET_DYN and ET_EXEC can be loaded

Alors que je fais cela assez regulierement pour mes bibliotheques dynamique

===========================================================================
 Patrick DUPRÉ                                 | | email: pdupre@???
===========================================================================



> Sent: Thursday, May 30, 2024 at 10:43 AM
> From: "Edgar Bonet" <guilde@???>
> To: guilde@???
> Subject: Re: Question de c/cpp
>
> Bonjour la Guilde !
>
> Raphaël Dorado a écrit :
> > La solution sale et rapide, c'est de rajouter "static" devant chaque
> > fonction déclarée dans ludcmp.h.
>
> Une autre solution est de qualifier ces fonctions de « inline » plutôt
> que « static ». Historiquement, « inline » demandait au compilateur de
> recopier le corps de la fonction au point d'appel. Cependant, les
> compilateurs modernes ont tendance à ignorer ça et à décider par eux
> mêmes. Un effet secondaire de « inline » est que tu as le droit de
> définir la fonction dans plusieurs unités de compilation, à condition
> que ces définitions soient identiques. Si le compilateur décide de faire
> une vraie fonction appelable, alors ces définitions seront combinées par
> l'éditeur de liens en use seule :
>
>   – static : une implémentation par unité de compilation
>   – inline : une implémentation unique partagée par toutes les unités de
>     compilation.

>
> Après, si les fonction sont non triviales, la bonne solution consiste à
> mettre leur implémentation dans un fichier .cpp, et laisser les seules
> déclarations dans le .h.
>
> À+,
>
> Edgar.
>
>