Pregunta

He estado tratando de hacer algunas aplicaciones que todos dependen de la misma biblioteca, y las bibliotecas dinámicas fueron lo primero que pensé: Así que empecé a escribir 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;
}

A continuación, compile la "biblioteca"

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

Entonces escribí 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, ayúdame:)

¿Fue útil?

Solución

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

Otros consejos

Puede utilizar

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

El uso de "dos puntos" utilizará el nombre de biblioteca como es, más bien que requiere un prefijo de "lib"

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

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

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 se deben nombrar libXXX.so. Cambiar el nombre de la biblioteca y que va a funcionar.

Consulte este artículo.

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

Un buen recurso sobre cómo construir diferentes tipos de bibliotecas. También describe cómo y dónde utilizarlos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top