Domanda

Ho provato a creare alcune applicazioni che si basano tutte sulla stessa libreria e il mio primo pensiero è stato quello delle librerie dinamiche:Così ho iniziato a scrivere la "Biblioteca":

/* ThinFS.h */

class FileSystem {
public:
    static void create_container(string file_name); //Creates a new container 
};

/* ThinFS.cpp */
#include "ThinFS.h"
void FileSystem::create_container(string file_name) {
     cout<<"Seems like I am going to create a new file called "<<file_name.c_str()<<endl;
}

Quindi compilo la "Libreria"

g++ -shared -fPIC FileSystem.cpp -o ThinFS.o

Ho quindi scritto rapidamente un file che utilizza la Libreria:

#include "ThinFS.h"
int main() {
    FileSystem::create_container("foo");
    return (42);
}

Ho quindi provato a compilarlo con

g++ main.cpp -L. -lThinFS

Ma non verrà compilato con il seguente errore:

/usr/bin/ld: cannot find -lThinFS
collect2: ld returned 1 exit status

Penso che mi manchi qualcosa di molto ovvio, per favore aiutami :)

È stato utile?

Soluzione

-lfoo cerca una libreria chiamata libfoo.a (statico) o libfoo.so (condiviso) nel percorso della libreria corrente, quindi per creare la libreria è necessario utilizzare g++ -shared -fPIC FileSystem.cpp -o libThinFS.so

Altri suggerimenti

Puoi usare

g++ main.cpp -L. -l:ThinFS 

L'uso di "due punti" utilizzerà il nome della libreria così com'è, anziché richiedere il prefisso "lib"

il nome del file di output dovrebbe essere libThinFS.so, per esempio.

g++ -shared -fPIC FileSystem.cpp -o libThinFS.COSÌ

Il risultato di g++ -shared -fPIC FileSystem.cpp non è un file oggetto, quindi non dovrebbe terminare con .o.Inoltre, le librerie condivise dovrebbero essere nominate libXXX.so.Rinominare la libreria e funzionerà.

Dai un'occhiata a questo articolo.

http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Una buona risorsa su come costruire diversi tipi di librerie.Descrive anche come e dove usarli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top