[LINUX] Eine Geschichte über einen Erstellungsfehler in einer gemeinsam genutzten Bibliothek, die auf libusb verweist

Was ist passiert

Erstellen eines Programms, das libusb unter Ubuntu verwendet

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

Normalerweise denke ich, dass Sie so bauen können, Wenn ich versuche, dies zu einer gemeinsam genutzten Bibliothek (.so) anstelle einer ausführbaren Datei zu machen, wird ein Buildfehler angezeigt.

$ 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。 -Mit fPIC neu kompilieren.
/usr/bin/ld:Letzter Link fehlgeschlagen: bad value
collect2: error: ld returned 1 exit status

Was ist das? sah es zum ersten Mal.

Versuche es herauszufinden

Der Inhalt des Fehlers bedeutet, dass "libusb nicht mit -fPIC erstellt wurde, daher kann es in diesem Kontext nicht verwendet werden. Wenn Sie es verwenden möchten, erstellen Sie es mit -fPIC neu".

Nein, dafür müsste ich libusb nicht neu erstellen.

e? Ist das die Lösung?

Ich habe verschiedene Dinge ausprobiert, aber alle sind fehlgeschlagen (in der Richtung, libusb nicht neu aufzubauen), daher denke ich nicht, dass es notwendig ist, hier detailliert zu schreiben, aber die endgültige Lösung bestand darin, wie folgt zu bauen.

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

Kompilieren und verknüpfen Sie direkt aus .c-Dateien, ohne .o-Dateien zu erstellen. Was ist der Unterschied zum Generieren einer .o-Datei, nachdem Sie eine .so-Datei haben, die fehlerfrei funktioniert? ..

Ich verstehe nicht, was ich normalerweise mache ... Jetzt muss ich herausfinden, warum das funktioniert.

Recommended Posts

Eine Geschichte über einen Erstellungsfehler in einer gemeinsam genutzten Bibliothek, die auf libusb verweist
Über psd-tools, eine Bibliothek, die psd-Dateien in Python verarbeiten kann
dlopen () Verfolgt einen Funktionsaufruf in einer gemeinsam genutzten Bibliothek
Eine Geschichte über einen Fehler, wenn PyInstaller in einem Programm verwendet wird, das googleapiclient verwendet
Eine Geschichte, die die Discord-Aktivität im Slack-Status widerspiegelt
Eine Geschichte über einen Linux-Anfänger, der in einer Woche LPIC101 bestanden hat
Die Geschichte von PHP, die in der Entwicklungsumgebung in Ordnung war, in der Produktionsumgebung jedoch fehlerhaft LEVEL1 ~ 3 + 1
Veröffentlichung einer Bibliothek, die Zeichendaten in Python-Bildern verbirgt
Eine Geschichte darüber, wie man einen relativen Pfad in Python angibt.
Eine Geschichte über den Wettbewerb mit einem Freund in Othello AI Preparation
Eine Geschichte über die Installation von matplotlib mit pip mit einem Fehler
Eine Geschichte über den Versuch, private Variablen in Python zu implementieren.
Eine Geschichte über eine Tragödie, die durch den Austausch von Befehlen im Chat verursacht wurde
[Google Photo & Slack Photo Bot] Eine Geschichte über das Erstellen eines Bots, der ein Foto in Google Photo erfasst und an Slack sendet.
Verwenden Sie networkx, eine Bibliothek, die Diagramme in Python verarbeitet (Teil 2: Lernprogramm).
Die Geschichte, dass ein Hash-Fehler bei der Verwendung von Pipenv auftrat
Eine Geschichte über das Erstellen eines Programms, mit dem die Anzahl der Instagram-Follower in einer Woche von 0 auf 700 erhöht wird
Eine erfrischende Geschichte über Slice in Python
Hinweis zu get_scorer von sklearn
Eine launische Geschichte über Slice in Python
Die Geschichte der Verwendung von Python reduziert
Ein Hinweis zu Mock (Python-Mock-Bibliothek)
Einführung einer Bibliothek, die unter Python / Windows nicht in pip enthalten war
[Memorandum] Eine Geschichte über das Ausprobieren des OpenCV-Tutorials (Gesichtserkennung) in einer Windows-Umgebung
Versuchen Sie es mit APSW, einer Python-Bibliothek, die SQLite ernst nehmen kann
Ein Hinweis zu den Funktionen der Standard-Linux-Bibliothek, die sich mit Zeit befasst
Eine Geschichte über das Schreiben eines Programms, das Ihre eigenen Asset-Übergänge automatisch zusammenfasst
Eine Geschichte, die Heroku, die in 5 Minuten gemacht werden kann, tatsächlich 3 Tage dauerte
Code lesen von faker, einer Bibliothek, die Testdaten in Python generiert