#pragma comment ?



  • Hallo werte Kollegen,
    ich stehe gerade mal wieder auf dem Schlauch. Ich muss unser Projekt überarbeiten, soll heiße ich habe eine Kopie erstellt und
    passe nun die Pfade an. Eigentlich kein Ding aber weit gefehlt. Folgendes:

    // Implementation Basisklassen
    #ifndef BUILD_LIB
    	#ifdef _DEBUG
    		#pragma message ("Automatically link with ..\\Bin\\Debug\\CxFrameBase.lib")
    		#pragma comment (lib, "..\\Bin\\Debug\\CxFrameBase.lib")
    //		#pragma comment (lib, "\\CxPool\\Bin\\CxFrameBaseD.lib")
    	#else
    		#pragma message ("Automatically link with ..\\Bin\\Release\\CxFrameBase.lib")
    		#pragma comment (lib, "..\\Bin\\Release\\CxFrameBase.lib")
    //		#pragma comment (lib, "\\CxPool\\Bin\\CxFrameBaseR.lib")
    	#endif
    #endif
    

    Der Projektpfad für das gesamte Projekt: P:\NeueVersion\Cxpool
    Darunter befinden sich die Unterprojekte.
    Die Lib Dateien befinden sich in P:\NeueVersion\Cxpool\bin(Debug o. Release)\

    Wo kann ich den Inhalt der lib anzeigen lassen. Ich bekomme immer den Fehler:
    LINK : fatal error LNK1104: Datei "..\Bin\Debug\CxFrameBase.lib" kann nicht geöffnet werden.
    Da haut doch etwas mit dem Pfad nicht hin!?
    Der Codeauszug z.B. ist in der CxFRame.h enthalten.

    P:\NeueVersion\CxPool\Include\CxFrame.h(57): #pragma comment (lib, "\CxPool\Bin\Release\CxFrameBase.lib")

    Für die Auflösung von lib steht da jetzt der Programmpfad der Headerdatei oder des Projektes.

    Danke Torsten



  • Klappt es denn testweise mit dem vollen Pfad P:\\NeueVersion\\CxPool\\Bin\\Debug\\CxFrameBase.lib?



  • @Tossi65 sagte in #pragma comment ?:

    \\CxPool

    Das wird als "absoluter" Pfad vom system interpretiert.



  • Hallo an alle.

    Ich werde es mit dem absoluten Pfad mal probieren. Dann sehen wir weiter.
    Jetzt muss ich erst einmal ein anderes Projekt betreuen.
    Dann werde ich weiter berichten.

    Danke



  • Hallo,
    endlich mal Zeit das Projekt weiter zu machen. Wenn ich den ganzen absoluten Pfad eintrage geht es.
    ich habe mal die Umgebungsvariable $(OutDir) gesetzt. Da seteht folgendendes drin "P:\NeueVersion\cxpool\bin\debug" oder "P:\NeueVersion\cxpool\bin\release". Also das richtige.
    Trotzdem findet der Linker die Datei nicht. Was bewirkt das "lib" bei der Compilerdiriktive????

    Alles komisch 😉



  • Dann paßt wohl der relative Pfad "..\Bin" nicht.
    Du hast geschrieben:

    Der Projektpfad für das gesamte Projekt: P:\NeueVersion\Cxpool
    Darunter befinden sich die Unterprojekte.
    Die Lib Dateien befinden sich in P:\NeueVersion\Cxpool\bin(Debug o. Release)\

    Wo genau befinden sich die Projektdateien (.vcproj) der Unterprojekte? Direkt in den Unterverzeichnissen?

    PS: Bzgl. der Bedeutung von lib siehe comment pragma.



  • Hallo Th69,
    ja teilweise. Ich habe das Projekt bekommen und gesehen, das teilweise hin und her verlinkt wird. Echt zum k.....
    Ich würde ja gern mit einer Variablen in Visual Studio arbeiten, aber ich weiss nicht wie. Z. B. $(LibDir) P:\NeueVersion.....
    Es macht ja keinen Sinn dort einen absoluten Pfag einzutragen in den pragmas.

    Gruß Torsten

    PS:
    Ich würde gern ein Screenshot anfügen. Geht aber nicht 😢



  • Dann schreibe nur

    #pragma comment (lib, "CxFrameBase.lib")
    

    und füge den Pfad (absolut oder relativ) zu den Linkereinstellungen jedes Unterprojekts hinzu (kann aber bei vielen Unterprojekten mehr Aufwand sein).
    Oder du legst es (je nach Konfiguration) global unter "Library Directories" in VS an: Verzeichnis- und Pfadwerte (dort kannst du auch Makros benutzen).



  • @Tossi65 sagte in #pragma comment ?:

    Was bewirkt das "lib" bei der Compilerdiriktive????

    Die bewirkt dass der Compiler einen Vermerk in das .obj File schreibt, dass die angegebene Library mit gelinkt werden soll. Wenn dann eine .exe oder .dll gelinkt wird, wo so ein .obj File vorkommt, dann sieht der Linker den Vermerk, und sucht nach der angegebenen Library. In den dafür konfigurierten Verzeichnissen. Und linkt sie dann mit zu der .exe/.dll dazu.

    Normalerweise macht man das auch so wie @Th69 geschrieben hat: man gibt beim #pragma comment(lib) nur den Filenamen an, ohne irgend ein Verzeichnis. Und in dem Projekt wo dann die .exe/.dll gelinkt wird gibt man das passende "Library Directory" an wo das File zu finden ist.


Anmelden zum Antworten