Question

J'ai essayé de faire des applications qui seraient toutes sur la même bibliothèque, et les bibliothèques dynamiques ont été ma première pensée: Je commencé à écrire la « Bibliothèque »:

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

Je compile alors la "Bibliothèque"

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

Je puis rapidement écrit un fichier qui utilise la bibliothèque:

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

J'ai ensuite essayé de compiler cela avec

g++ main.cpp -L. -lThinFS

Mais il ne sera pas compilé avec l'erreur suivante:

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

Je pense que je manque quelque chose très évident, s'il vous plaît me aider:)

Était-ce utile?

La solution

-lfoo recherche une bibliothèque appelée libfoo.a (statique) ou libfoo.so (partagé) dans le chemin de la bibliothèque actuelle, afin de créer la bibliothèque, vous devez utiliser g++ -shared -fPIC FileSystem.cpp -o libThinFS.so

Autres conseils

Vous pouvez utiliser

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

L'utilisation de « colon » utilisera le nom de la bibliothèque comme il est plutôt exigeant un préfixe « lib »

le nom du fichier de sortie doit être libThinFS.so , par exemple.

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

Le résultat de g++ -shared -fPIC FileSystem.cpp n'est pas un fichier objet, il ne doit pas se terminer par .o. En outre, les bibliothèques partagées doivent être nommés libXXX.so. Renommer la bibliothèque et il fonctionnera.

Consultez cet article.

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

Une bonne ressource sur la façon de construire différents types de bibliothèques. Il décrit également comment et où les utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top