Frage

Ich habe herausgefunden, wie VC ++ so festgelegt werden kann, dass Code in eine .lib -Datei anstelle eines .exe kompiliert wird, aber ich habe Probleme, eine LIB zusammen mit meinen anderen .obj -Dateien zu verknüpfen.

So habe ich die Ordner der Bibliothek und der Anwendungsordner eingerichtet. (Ich bin mir nicht sicher, ob das richtig ist)

AppFolder
  App.sln
  App.ncb
  *.h
  *.cpp
  Debug
    *.obj
    App.exe

und woanders auf der Festplatte ...

LibraryFolder
  lib
    Library.lib
  include
    LibrarySolutionFolder
      Library.sln
      Library.ncb
      *.h
      *.cpp
      Debug
        *.obj
        Library.lib

Ich habe die Bibliothek *.h -Dateien aus den CPP -Dateien meiner App ausgelegt, und alles kompilt eine gute Rolle. Nur wenn es verlinkt, erhalte ich eine Liste aller .lib -Dateien, die gesucht werden, und Bibliothek.LIB ist nicht da, obwohl ich sie in VC ++ - Verzeichnissen aufgeführt habe. Wie kann ich das zum Linken bringen? (Und strukturiere ich die Bibliotheksordner richtig?)

War es hilfreich?

Lösung

Auf den Projekteigenschaften:

Konfigurationseigenschaften -> Linker -> Eingabe -> Zusätzliche Abhängigkeiten

Fügen Sie es dort hinzu.

Oder in Ihrer .h -Datei für die Bibliothek hinzufügen:

#pragma comment(lib, "Library")

Dies wird es automatisch für Sie tun.

Andere Tipps

Die VC ++ - Verzeichnisse sind die Liste der Verzeichnisorte, die während der Verknüpfung durchsucht werden. Es handelt sich nicht um eine Liste von Bibliotheken.

Sie müssen die LIB -Datei zu der hinzufügen Zusätzliche Abhängigkeiten Feld der Projektlinker die Einstellungen.

Um mit einer Bibliothek zu verlinken, können Sie entweder:

  • Listen Sie es in Projekt-> Eigenschaften auf ...-> Linker, Input-> Zusätzliche Abhängigkeiten (VC ++-Verzeichnisse können nur den Namen .Lib-Namen eher den vollständigen Pfad verwenden).
  • Fügen Sie das Bibliotheksprojekt Ihrer App hinzu. Lösung (auf Lösung, rechten Maustaste -> Hinzufügen -> vorhandenes Projekt ...), verwenden Sie Projekte -> Projektabhängigkeiten ... und überprüfen Sie Ihr Bibliotheksprojekt (stellen Sie sicher, dass das Anwendungsprojekt in der Dropdown -Liste ausgewählt ist). Dies ist wahrscheinlich der beste Weg, wenn Sie beide Projekte beschneiden, da VC ++ die Bibliothek wieder aufgebaut hat, wenn sie sich vor dem Erstellen Ihrer App geändert hat.
  • Wenn Sie sicher sind, dass Sie nur VC ++ verwenden, verwenden Sie nur,

      #pragma comment(lib,"C:\\path\\to\\library.lib")`
    

    (Danke @nils)

NB: Es scheint sehr seltsam, Ihren Bibliothekslösungsordner in einem 'Include' -Verzeichnis zu haben: die wirklich für *.h (oder andere bestimmt sind #includeD Dateien).

Aus der Befehlszeile:

Cl /EHSC {ObjFiles}+ /link /libPath: LibraryFolder Library.lib

Wobei {objFiles}+ ein oder mehrere Objekt- oder CPP -Dateien bedeutet.

VC verknüpft die Bibliothek nicht einfach, wenn Sie die Header-Datei einfügen.

Sie müssen dem Linker sagen, er solle die Bibliothek verwenden. Aus guten Gründen: Sie haben Langzeites Tausende von LIBs in Ihrem Bibliotheksordner. Wenn MSVC sie jedes Mal durchsuchen müsste, wenn Sie Ihr Programm verknüpfen, müsste es durch Hunderte von Megabyte von Daten waten.

Das würde eine Weile dauern, deshalb ist es standardmäßig nicht getan.

Für VC können Sie dem Linker in Ihrer Quelle auch einen Hinweis geben. Zu diesem Zweck fügen Sie die folgende Zeile irgendwo in Ihrem Quellcode hinzu (der Kopfzeilen der LIB kann ein guter Ort sein).

#pragma comment(lib,"c:\\path_to_library\\libname.lib")

Das ist keine Plattform -Independet, sondern der bequemste Weg, um eine LIB automatisch mit einem Projekt mit MSVC verknüpft zu machen.

Eine andere Möglichkeit besteht darin, den Linker einfach den Projekteinstellungen hinzuzufügen. Die relevanten Informationen finden Sie in den Linkereinstellungen Ihres Projekts. Vergessen Sie nicht, die LIB zu den Veröffentlichungs- und Debugg -Konfigurationen hinzuzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top