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.
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.
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