Verknüpft die C-Bibliothek mit einem nicht standardmäßigen Namen

7

Ich verwende gcc, um ein Programm zu kompilieren, das ich mit einer C-Bibliothek mit nicht-standardmäßigen Namen verknüpfen muss; Es heißt stuff.a anstelle von libstuff.a .

Ich kann den Namen der Datei nicht ändern (Berechtigungsprobleme).

Ich möchte die vollständige Bibliothek nicht einschließen (d. h. gcc program.c stuff.a -oprogram verwenden)

Ich möchte als gcc program.c -L/path/to/library/ -lstuff -oprogram kompilieren, aber gcc findet die Bibliothek nicht (weil sie nicht libstuff.a heißt).

Ich arbeite an einer Linux-Box.

Wie kann ich die (dynamische) Verknüpfung machen?

BEARBEITEN:

Ich danke Ihnen allen und entschuldige mich für eine schlecht formulierte Frage.

Ich hatte nicht einmal ein gemeinsames Objekt (ich dachte, ich könnte es dynamisch mit einer * .a-Datei verknüpfen), was viele von euch verwirrt hat. Nochmals, Entschuldigung für meine Ignoranz.

Was ich getan habe, ist das Erstellen des gemeinsamen Objekts in einem lokalen Verzeichnis, das Anfügen der Position an meine Umgebungsvariable LD_LIBRARY_PATH und das erneute Verknüpfen.

Es funktioniert wie ein Zauber (von 1.3M ausführbar bis 5.8K).

Nochmals vielen Dank.

    
Escualo 21.01.2010, 19:07
quelle

6 Antworten

6

Unter der Annahme, dass eine freigegebene Objektversion der statischen Bibliothek nicht vorhanden ist, muss möglicherweise eine solche erstellt werden. Denken Sie daran, dass die statische Bibliothek stuff.a nur ein Archiv ist.

%Vor%

Dies setzt voraus, dass Sie wollen als Shared Library dagegen verlinken und nicht einfach in Ihre Binärdatei kompilieren.

    
jschmier 21.01.2010, 19:13
quelle
5

Sie sollten sich das gcc-Handbuch angesehen haben:

  

Der einzige Unterschied zwischen der Verwendung eines   -l-Option und Angabe eines Dateinamens ist, dass -l umgibt Bibliothek mit   'lib' und '.a' und sucht mehrere   Verzeichnisse.

Es ist nichts falsch daran, stuff.a als Argument zu verwenden.

    
Christoph 21.01.2010 19:32
quelle
4

Können Sie eine symbolische Verbindung zu stuff.a namens libstuff.a erstellen? Sie könnten sogar den Symlink in einem anderen Verzeichnis (d. H. Kein Standardbibliotheksverzeichnis) erstellen und die -L -Option mit gcc verwenden, um das Verzeichnis mit dem Symlink einzuschließen.

    
mob 21.01.2010 19:10
quelle
3

Verknüpfen Sie es wie eine Objektdatei:

%Vor%

Wenn Sie den vollständigen Pfad nicht mögen, verwenden Sie einfach eine Variable. Andernfalls könnten Sie LD_Library_Path analysieren und die Datei dort auf Existenz testen.

    
Anycorn 21.01.2010 19:22
quelle
1

Geben Sie einfach den vollständigen Namen an:

%Vor%     
Richard Pennington 21.01.2010 19:28
quelle
1

Ich weiß, dass das Problem darin bestand, eine statische Bibliothek dynamisch verlinken zu lassen, aber das wollte ich der Nachwelt hinzufügen:

Wenn Sie Ihr Argument der Option -l mit einem Doppelpunkt voranstellen, : , behandelt es den Namen als Literal und nicht als einen Namen, der "lib" an der Vorderseite und die Dateierweiterung am Ende benötigt .

Wenn Sie angeben, wo Sie mit einem static.a anstatt mit einem libstatic.a verknüpfen möchten, und davon ausgehen, dass Sie dagegen statisch verknüpfen möchten, würde Folgendes funktionieren:

%Vor%

Sie könnten natürlich tun, wie Richard Penington und Anycorn beide erwähnt haben, und einfach die voll-pathed Bibliothek in die Befehlszeile einfügen:

%Vor%     
mtalexan 23.06.2017 18:03
quelle

Tags und Links