2010-01-04 7 views
6

que he estado tratando de hacer algunas aplicaciones que todos dependen de la misma biblioteca y librerías dinámicas eran lo primero que pensé: Así que empecé a escribir la "Biblioteca":¿Por qué no enlaza g ++ con la biblioteca dinámica que creo?

/* 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; 
} 

I a continuación, compilar la "biblioteca"

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

entonces escribió rápidamente un archivo que utiliza la Biblioteca:

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

luego trató de compilar que con

g++ main.cpp -L. -lThinFS 

Pero no va a compilar con el siguiente error:

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

Creo que me falta algo muy obvio, por favor me ayude :)

Respuesta

11

-lfoo busca una biblioteca llamada libfoo.a (estática) o libfoo.so (compartido) en la ruta actual de la biblioteca, por lo que para crear la biblioteca, es necesario utilizar g++ -shared -fPIC FileSystem.cpp -o libThinFS.so

+0

Gracias, el lib faltaba en la parte delantera (.o en lugar de .so solo fue un error tipográfico) :) – lazlow

3

el nombre del archivo de salida debe ser libThinFS.so, por ejemplo

 
g++ -shared -fPIC FileSystem.cpp -o libThinFS.so 
1

El resultado de g++ -shared -fPIC FileSystem.cpp no es un archivo objeto, por lo que no debe terminar con .o. Además, las bibliotecas compartidas deben llamarse libXXX.so. Cambie el nombre de la biblioteca y funcionará.

6

Puede utilizar

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

El uso de "dos puntos" va a utilizar el nombre de la biblioteca como es, y no requiere un prefijo de "liberación"

Cuestiones relacionadas