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