ora da quello che posso vedere il comando è
-l + filename
, ad esempio il nome del mio file èdirectory/libtest.so
sarebbe-ldirectory/libtest.so
No, non è corretto. Dovrebbe essere -Ldirectory -ltest
cioè usi -L
per aggiungere una directory ai percorsi di ricerca in cui il linker cercherà le librerie e tu dici a quali librerie collegarti con -l
, ma per collegarsi a libtest.so
o libtest.a
tu dici -ltest
senza il lib
prefisso o l'estensione del file.
Puoi link nominando il file in modo esplicito, senza -L
o -l
opzioni, cioè solo directory/libtest.so
, ma per le librerie dinamiche è quasi sempre la cosa sbagliata da fare, poiché incorpora quel percorso esatto nell'eseguibile, quindi la stessa libreria deve trovarsi nello stesso posto quando il programma viene eseguito. In genere vuoi collegarti ad esso per nome (non percorso) in modo che la libreria con quel nome possa essere utilizzata da qualsiasi posizione in fase di esecuzione.
Questa è una procedura passo passo su come creare e collegare un file .so con .cpp
-
Crea il file .cpp che desideri convertire in .so.
Esempio -
#include<stdio.h> int add(int a , int b) { return a+b;}
Salvalo con il nome add.cpp
-
Crea .so con il seguente comando
gcc -c -fPIC add.cpp -o add.o
Questo crea libadd.so
-
Crea un file .cpp che utilizzerà questo file .so
Esempio-
#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; }
Salvalo come main_file.cpp
-
Crea un file .o da questo file usando questo comando
g++ -c main_file.cpp
-
Collega .so con .o usando questo comando
g++ -o prog main_file.o -L. -ladd
Qui L specifica la cartella con il file .so
E -l specifica il nome della libreria .so -
Eseguire il programma con il comando
./prog