[LINUX] Une histoire sur une erreur de construction dans une bibliothèque partagée qui fait référence à libusb

Qu'est-il arrivé

Créer un programme qui utilise libusb sur ubuntu

$ gcc -c testUsb.c
$ gcc testUsb.o testUsb -lusb

Normalement, je pense que vous pouvez construire comme ça, Si j'essaie d'en faire une bibliothèque partagée (.so) au lieu d'un fichier exécutable, j'obtiens une erreur de construction.

$ gcc -c testUsb.c
$ gcc -shared -fPIC testUsb.o -o libTestUsb.so -lusb
/usr/bin/ld: testUsb.o: relocation R_X86_64_PC32 against symbol `devInfo' can not be used when making a shared object。 -Recompilez avec fPIC.
/usr/bin/ld:Échec du dernier lien: bad value
collect2: error: ld returned 1 exit status

Qu'est-ce que c'est? vu pour la première fois.

Essayer de trouver

Le contenu de l'erreur signifie que "libusb n'a pas été construit avec -fPIC, donc il ne peut pas être utilisé dans ce contexte. Si vous voulez l'utiliser, reconstruisez-le avec -fPIC".

Non, je n'aurais pas à reconstruire libusb pour cela.

e? Est-ce la solution?

J'ai essayé diverses choses, mais elles ont toutes échoué (dans le sens de ne pas reconstruire libusb), donc je ne pense pas qu'il soit nécessaire d'écrire en détail ici, mais la solution finale était de construire comme suit.

$ gcc -shared -fPIC testUsb.c -o libTestUsb.so -lusb

Compilez et liez directement à partir du fichier .c sans créer de fichier .o. Maintenant que vous avez un fichier .so qui fonctionne correctement sans aucune erreur, quelle est la différence avec la génération d'un fichier .o? ..

Je ne comprends pas ce que je fais normalement ... Maintenant, je dois découvrir pourquoi cela fonctionne.

Recommended Posts

Une histoire sur une erreur de construction dans une bibliothèque partagée qui fait référence à libusb
À propos de psd-tools, une bibliothèque capable de traiter des fichiers psd en Python
dlopen () ltrace un appel de fonction dans une bibliothèque partagée
Une histoire sur une erreur lorsque PyInstaller est utilisé dans un programme qui utilise googleapiclient
Une histoire qui reflète l'activité Discord dans Slack Status
Une histoire sur un débutant Linux passant LPIC101 en une semaine
L'histoire de PHP qui était correcte dans l'environnement de développement mais boguée dans l'environnement de production LEVEL1 ~ 3 + 1
Publication d'une bibliothèque qui masque les données de caractères dans les images Python
Une histoire sur la façon de spécifier un chemin relatif en python.
Une histoire de compétition avec un ami dans Othello AI Preparation
Une histoire sur l'installation de matplotlib à l'aide de pip avec une erreur
Une histoire sur la tentative d'implémentation de variables privées en Python.
Une histoire sur une tragédie qui se passe en échangeant des commandes dans le chat
[Google Photo & Slack Photo Bot] Une histoire sur la création d'un bot qui acquiert une photo dans Google Photo et l'envoie à Slack.
Utilisez networkx, une bibliothèque qui gère les graphiques en python (Partie 2: Tutoriel)
L'histoire de l'erreur de hachage est apparue lors de l'utilisation de Pipenv
Une histoire sur la création d'un programme qui augmentera le nombre d'abonnés Instagram de 0 à 700 en une semaine
Une histoire rafraîchissante sur Slice en Python
Remarque à propos de get_scorer de sklearn
Une histoire de mauvaise humeur sur Slice en Python
L'histoire de l'utilisation de la réduction de Python
Une note sur mock (bibliothèque fictive Python)
Présentation d'une bibliothèque qui n'était pas incluse dans pip sur Python / Windows
[Mémorandum] Une histoire sur l'essai du didacticiel OpenCV (reconnaissance faciale) dans un environnement Windows
Essayez d'utiliser APSW, une bibliothèque Python que SQLite peut prendre au sérieux
Une note sur les fonctions de la bibliothèque Linux standard qui gère le temps
Une histoire sur l'écriture d'un programme qui résume automatiquement vos propres transitions d'actifs
Une histoire que heroku, qui peut se faire en 5 minutes, a en fait duré 3 jours
Lecture de code de faker, une bibliothèque qui génère des données de test en Python