2017-03-05 2 views
0

In den Linker-Einstellungen sollten Sie dem Compiler mitteilen, welche .lib-Dateien einbezogen werden sollen. Eine einfache Sache, die ich nicht herausgefunden habe, ist, wie man weiß, welche Funktion in welcher .lib-Datei ist, wenn Software von Drittanbietern verwendet wird?Wie finden Sie, welche .lib-Datei zu welcher Funktion gehört?

Beispiel: Ich war vor kurzem mit Qt, die eine große Anzahl von .lib-Dateien hat. Nachdem ich die mit den offensichtlichsten Namen ausprobiert hatte, musste ich sie alle durch Versuch und Irrtum durchgehen, bis ich die richtige gefunden hatte. Ich dachte, diese Informationen würden in der Dokumentation von Qt enthalten sein, aber ich konnte sie nicht finden. Ich bin immer noch ein Anfänger, der mir selbst beibringt, manchmal gehen so einfache Dinge an mir vorbei.

+0

können Sie einfach Name der Funktion in * .lib-Dateien suchen – RbMm

Antwort

1

Es gibt zwei grundlegende Ansätze.

Die erste Option ist die Dokumentation für die Dritte-Bibliothek (Microsoft ist sehr gut darin. - sie sind die Bibliothek und Header Sie in jeder Funktion benötigen Es scheint Qt nicht so gut ist.) Lesen

Die zweite Option besteht darin, die Namen in jeder Bibliothek mit DUMPBIN aufzulisten, wie es here beschrieben ist.

Wie in den Kommentaren erwähnt, besteht eine Variante der zweiten Option darin, die .lib-Dateien für einen einfachen Text der Funktionsnamen zu grepen. Dadurch erfahren Sie, welche .lib-Dateien die Funktion definieren oder aufrufen. Wenn es nur einen gibt, bist du fertig. Wenn es mehr als einen gibt, müssen Sie DUMPBIN für alle zurückgegebenen Dateien ausführen, um zu sehen, welcher definiert ist.

+0

ja natürlich können wir 'link.exe -dump/EXPORTS" somelib.lib "> somelib.log' für jede' somelib.lib' ausführen, aber was wäre, wenn wir haben viele libs? Mach das für jeden? Funktionsname enthält in lib-Datei im Klartext wie (kann verziert werden - zusätzliche Symbole am Anfang und Ende, aber root wie. so schnell und einfach - einfach Dateien suchen, Kontakt 'somefunc' Name (case sensitive) – RbMm

+0

Ja, tue es für jede lib. Ich bin nervös bei der Suche nach binärem Code für Text. (Ja, ja, ich weiß, es funktioniert - es fühlt sich einfach nicht sauber für mich an.) Beachten Sie auch, dass der Text erscheint, wenn die .lib * aufruft * Die Funktion, anstatt * definiert * es. –

+0

Wir brauchen die Suche im Klartext (Funktionsname) wie üblich alle Lib in den gleichen Ordner gestellt, also suche alle * .lib Dateien mit dem Text 'myfunction' - arbeiten sehr schnell und einfach .wenn mehr als 1 Ergebnis (selten) sein wird - kann schon mehr nach gesuchten Bibliotheken suchen – RbMm

Verwandte Themen