Pragma und Pfade



  • Re: #pragma comment ?

    Hallo Kollegen, ich muss noch einmal auf das Thema zurück kommen.
    Ich muss das Projekt auf einen neuen Entwicklungsrechner zum Laufen bringen. Leider
    musste ich feststellen, dass sehr viel mit absoluten Pfaden gearbeitet wurde.
    Das möchte ich ändern, also habe ich folgenden Umgebungsvariable erstellt $(CxPool) => P:\CxPool
    Beii den Projekten, in denen per pragma lib eingebunden werden sollen, habe
    ich in den Bibliotheksverzeichnis = $(CxPool)\Bin eingetragen.

    Pfad auf dem LW:
    P:\CxPool\bin\ Debug\file.lib
    oder
    P:\CxPool\bin\ Release\ file.lib

    Pfad des Projektes:
    P:\CxPool\CxFrame\CxFrame\CxFrame.vcxproj

    Pfad der Unit, in der die "pragma" Anweisung steht
    P:\CxPool\Include\CxFrame.h

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

    Compilermeldung Anfang:

    ------ Neues Erstellen gestartet: Projekt: CxFrame, Konfiguration: Debug Win32 ------
    Der Buildvorgang wurde am 19.08.2022 09:47:22 gestartet.
    _PrepareForClean:
    Die Datei "O:\CxPool\CxPool\Debug\CxFrame.lastbuildstate" wird gelöscht.
    InitializeBuildStatus:
    Aktualisieren des Timestamps von "O:\CxPool\CxPool\Debug\CxFrame.unsuccessfulbuild".
    Midl:
    Processing ....\CxSecServer\Interface\ICxSecServer.idl
    ICxSecServer.idl
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.idl
    unknwn.idl
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wtypes.idl
    wtypes.idl
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\basetsd.h
    basetsd.h
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\guiddef.h
    guiddef.h
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\oaidl.idl
    oaidl.idl
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\objidl.idl
    objidl.idl
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\oaidl.acf
    oaidl.acf
    Processing ..\Interface\IFrame.idl
    IFrame.idl
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\oleidl.idl
    oleidl.idl
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\objidl.idl
    objidl.idl
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.idl
    unknwn.idl
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wtypes.idl
    wtypes.idl
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\basetsd.h
    basetsd.h
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\guiddef.h
    guiddef.h
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\oaidl.idl
    oaidl.idl
    Processing c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\oaidl.acf
    oaidl.acf
    ClCompile:
    StdAfx.cpp
    Automatically link with ..\Debug\CxFrameBaseD.lib
    Automatically link with ..\Bin\Debug\CxCommonD.lib
    Automatically link with ..\Bin\Debug\CxCommonLibD.lib
    Automatically link with ....\Bin\Debug\CxDataLoggerLibD.lib
    Automatically link with ..\Bin\CxSchedulerLibD.lib
    Automatically link with ..\Bin\CxEventServerLibD.lib
    ViewBarPaneSettingsDlg.cpp
    ViewBarItemImp.cpp
    ViewBarFavoriteSettingsDlg.cpp
    ViewBarEnumImp.cpp
    SystemLanguageDlg.cpp
    StatusView.cpp
    Splash.cpp
    SetupDlg.cpp
    ServerListEnumImp.cpp
    ServerList.cpp
    ScrollHelper.cpp
    PopupMenuImp.cpp
    PasswordDlg.cpp
    MenuItemImp.cpp
    MainFrame.cpp
    MainAccel.cpp
    FrameViewBar.cpp
    FrameView.cpp
    FrameMenuBar.cpp
    FrameDoc.cpp
    Code wird generiert...
    Kompilieren...
    FrameConfig.cpp
    FrameApp.cpp
    AboutDlg.cpp
    SECREG.CPP
    CxDllTools.cpp
    Code wird generiert...
    IFrame_i.c
    ICxSecServer_i.c
    Code wird generiert...
    LINK : fatal error LNK1104: Datei "..\Debug\CxFrameBaseD.lib" kann nicht geöffnet werden.

    Fehler beim Erstellen

    Verstrichene Zeit 00:00:08.84
    ========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========

    Compilermeldung Ende:

    Ich habe schon so viele Konstellationen für den Pfad ausprobiert, nichts geht. HIlfe!!!!
    😭

    Für den Linkfehler, von welchen Pfad geht der Linker an dieser Stelle aus????

    Das einzige was klappt ist den absoluten Pfad eintragen, aber das wäre kontraproduktiv.

    Danke Torsten



  • Warum denn ".." (also das Parent-Verzeichnis)?

    Nimm ".\\" oder lösche ..\\:

    #pragma comment (lib, "Debug\\CxFrameBaseD.lib")
    

    (selbe dann für Release und jeweils im Text darüber).

    Edit: Das hatten wir doch schon Anfang diesen Jahres in #pragma comment ? erklärt.
    Also besser nur den Pfadnamen eintragen und jeweils in der Konfiguration die Linkerpfade passend setzen.



  • Hallo Th69,

    ja das haben wir. Aber ich bin nicht durch das ganze Projekt durch gekommen und musste abbrechen. Jetzt brauche ich einen neuen Entwicklungsrechner, der nicht aufgebaut ist wie der alte. Also von vorne.
    Aber irgendetwas haut hier nicht hin.

    So ich habe den Eintrag im Quelltext so geändert:
    #pragma message ("Automatically link with .\Debug\CxFrameBaseD.lib")
    #pragma comment (lib, ".\Debug\CxFrameBaseD.lib")

    Ergebnis:
    LINK : fatal error LNK1104: Datei ".\Debug\CxFrameBaseD.lib" kann nicht geöffnet werden.

    #pragma message ("Automatically link with Debug\CxFrameBaseD.lib")
    #pragma comment (lib, "Debug\CxFrameBaseD.lib")

    Ergebnis:
    LINK : fatal error LNK1104: Datei "Debug\CxFrameBaseD.lib" kann nicht geöffnet werden.

    Ich verstehe das nicht. Von welchem Pfad geht der Linker aus?

    Oder vergesse ich noch an einer anderen Stelle eine Änderung zu machen?

    Gruß Torsten



  • Hast du denn jetzt mal probiert, nur den Dateinamen einzutragen und dann das "Debug"- bzw. "Release"-Verzeichnis je nach Konfiguration in den Linker-Einstellungen zu setzen? Dies wird auch in Relative path with #pragma comment(lib) so empfohlen.



  • Guten Morgen,

    sorry unsere Server spinnen seit dem letzten Windows-Update.

    Ja habe ich probiert mit folgendem Ergebnis:

    LINK : fatal error LNK1104: Datei "CxFrameBaseD.lib" kann nicht geöffnet werden.

    Welcher Basispfad ist zum Zeitpunkt des Linken gesetzt. Dann kann man daraus den relativen Pfad erstellen.

    Und wird der Bibliothekspfad dazu überhaupt benötigt? Eigentlich ja nicht, sonst müßte er ja nicht relativ sein.

    Es ist einfach nur blöd und die VS Doku zu diesem Thema ist wie immer unzureichend.

    Gruß Torsten



  • Ich weiß jetzt nicht, ob "Bibliothekspfad" der deutsche Text für "Additional Library Directories" im VS ist, aber ich meine den Eintrag unter "Linker / General", s.a. Configuring Visual Studio for C/C++ Projects (2. Bild).

    Edit: Laut /LIBPATH heißt es wohl auf deutsch "Linker / Allgemein" -> "Zusätzliche Bibliotheksverzeichnisse".
    Und der Standardpfad (d.h. ohne Angabe) ist der in der Umgebungsvariablen "LIB" gesetzte Eintrag (also projektunabhängig!).



  • Mein Eintrag für C++ sieht so aus wie in Bild 1.
    Ich bin mir nicht sicher ob das was ausmacht, aber ich habe die Umgebungsvariable für den Linker (Bild 2) so stehen:
    %MYLIBDIR%;%(AdditionalLibraryDirectories)



  • Und welche Pfade stehen in diesen beiden Variablen?

    Füge dort doch einfach noch (für Debug-Konfiguration) P:\CxPool\bin\Debug (bzw. $(CxPool)\bin\Debug) sowie analog für Release-Konfiguration ...\Release hinzu.

    Edit: Oder für alle Konfigurationen P:\CxPool\bin\$(Configuration) verwenden (sofern du die Konfigurationsnamen in allen Projekten immer gleich hältst), s.a. Common macros for MSBuild commands and properties.



  • Hallo,

    danke für Eure Unterstützung. Ich habe den Fehler gefunden. Mangelnde bzw. keine Informationen vom Urheber des Projektes.
    Auf seinem Computer waren die fehlenden Informationen im Path der Umgebungsvariablen gesetzt. Auf meinen neuen Computer nicht
    und es gibt auch keine Doku darüber. Ich werde jetzt erst einmal ein ReadMe erstellen. Für die Zukunft.

    Gruß Torsten

    PS: Den Urheber kann ich nicht mehr fragen 😢



  • 👍

    War wohl noch etwas früh für mich heute morgen - habe nicht gemerkt, daß ja nicht, du, @Tossi65, den Beitrag gepostet hast, sondern @Helmut-Jakoby...



  • Danke an alle, ich habe es hinbekommen.

    Gruß Torsten


Anmelden zum Antworten