maintenant, d'après ce que je peux voir, la commande est
-l + filename
, par exemple mon nom de fichier estdirectory/libtest.so
ce serait-ldirectory/libtest.so
Non, ce n'est pas correct. Il devrait être -Ldirectory -ltest
c'est-à-dire que vous utilisez -L
pour ajouter un répertoire aux chemins de recherche où l'éditeur de liens recherchera des bibliothèques, et vous dites à quelles bibliothèques lier avec -l
, mais pour lier à libtest.so
ou libtest.a
vous dites -ltest
sans le lib
préfixe ou l'extension de fichier.
Vous pouvez lien en nommant le fichier explicitement, sans -L
ou -l
options, c'est-à-dire juste directory/libtest.so
, mais pour les bibliothèques dynamiques, c'est presque toujours la mauvaise chose à faire, car il intègre ce chemin exact dans l'exécutable, de sorte que la même bibliothèque doit être au même endroit lorsque le programme s'exécute. Vous souhaitez généralement créer un lien vers celui-ci par son nom (et non par son chemin) afin que la bibliothèque portant ce nom puisse être utilisée à partir de n'importe quel emplacement au moment de l'exécution.
Il s'agit d'une procédure étape par étape pour créer et lier un fichier .so avec un fichier .cpp
-
Créez le fichier .cpp que vous souhaitez convertir en .so.
Exemple -
#include<stdio.h> int add(int a , int b) { return a+b;}
Enregistrez-le sous le nom add.cpp
-
Créez .so avec la commande suivante
gcc -c -fPIC add.cpp -o add.o
Cela crée libadd.so
-
Créez un fichier .cpp qui utilisera ce fichier .so
Exemple-
#include<stdio.h> extern int add(int a, int b); int main(int argc, char** argv) { printf("Hello the output is %d \n",add(10,15)); return 0; }
Enregistrez-le sous main_file.cpp
-
Créez un fichier .o à partir de ce fichier à l'aide de cette commande
g++ -c main_file.cpp
-
Liez .so avec .o en utilisant cette commande
g++ -o prog main_file.o -L. -ladd
Ici L spécifie le dossier avec le fichier .so
Et -l spécifie le nom de la bibliothèque .so -
Exécutez le programme avec la commande
./prog