Lors de l'inclusion d'une bibliothèque pour gcc (-l ou minuscule -L), comment pourrais-je connaître le nom de la bibliothèque à insérer dans ce paramètre pour un fichier d'en-tête spécifique?

Un exemple (mais je cherche une réponse plus générale):

Mon fichier c (nommé doSomething.c) pourrait avoir:

#include <libv4l2.h>
...
...

Ma déclaration gcc ressemblerait à ceci:

gcc -o doSomething doSomething.c -lv4l2

Dans ce cas, je savais que je devais inclure la bibliothèque v4l2, si je n'avais pas su, y a-t-il un moyen générique de trouver ce nom?

Toute aide serait appréciée

Merci

c gcc
0
test123 25 nov. 2017 à 05:13

3 réponses

Meilleure réponse

Celui qui vous a fourni la bibliothèque doit vous dire son nom. Souvent, cela est vague, implicite, enfoui dans la documentation ou laissé aux conventions.

Pour commencer, vous pouvez transmettre n'importe quelle bibliothèque à l'éditeur de liens en utilisant le chemin d'accès complet dans le système de fichiers, tel que /usr/lib/libfoo.so ou ~ myaccount / mystuff / bar.a.

L'éditeur de liens a une liste intégrée d'emplacements standard pour rechercher des bibliothèques, vous pouvez donc omettre la partie répertoire du chemin et nommer simplement le fichier, comme libfoo.so. Vous pouvez également ajouter des répertoires à cette liste avec le commutateur -L (pour les éditeurs de liens courants sur POSIX et d'autres systèmes).

Si le nom du fichier a la forme lib foo .a ou d'autres extensions reconnues par l'éditeur de liens, vous pouvez l'abréger avec -l foo .

Donc, si la bibliothèque est installée dans un emplacement standard avec un nom standard, vous pouvez la lier avec -l foo , et le fournisseur ou un autre fournisseur devrait vous dire ce que foo est.

Si la bibliothèque fait partie d'un progiciel installé sur votre système mais ne fait pas partie du système standard, vous pouvez demander à votre administrateur système quel est son nom et, s'il ne se trouve pas dans un emplacement standard, où il a été installé. il.

0
Eric Postpischil 25 nov. 2017 à 03:10

Sur les systèmes POSIX, les fichiers de bibliothèque sont nommés libxxx.a (pour les bibliothèques statiques qui seront intégrées dans votre exécutable) ou libxxx.so (pour les bibliothèques dynamiques qui seront liées à l'exécution par ld.so (ld-linux.so pour GNU / Linux)). Les deux peuvent éventuellement porter un suffixe de version, comme libc.so.6. Les bibliothèques standard et autres que vous avez installées avec votre gestionnaire de packages (apt, yum ou pacman) se trouvent dans /lib et /usr/lib.

Lors de la liaison, il vous suffit de spécifier son nom (c'est-à-dire xxx). Comme lorsque vous souhaitez lier la bibliothèque mathématique libm.so, compilez votre programme avec

gcc needMath.c -o needMath -lm
                           ~~^

Sur d'autres plates-formes, vous feriez mieux de consulter le manuel du fournisseur de bibliothèque pour déterminer le nom réel à fournir comme argument de ligne de commande au compilateur. Le manuel est votre ami.

0
iBug 25 nov. 2017 à 03:13

Le nom d'une bibliothèque de liens dans un environnement POSIX (comme Linux) a un format spécial.

Une bibliothèque statique (essentiellement une archive de fichiers objets) a le format libname.a.

Une bibliothèque dynamique a le format libname.so. Peut-être avec un numéro de version ajouté à la fin (comme par exemple libname.so.1 ou libname.so.1.3).

Lors de la liaison à l'aide de l'indicateur -l (L minuscule), vous ne spécifiez que name.

En savoir plus sur la différence entre -l qui ajoute une bibliothèque avec laquelle créer un lien et -L qui ajoute un chemin pour rechercher des bibliothèques.

0
Some programmer dude 25 nov. 2017 à 03:15
47482040