Pragma und Pfade
-
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.libPfad des Projektes:
P:\CxPool\CxFrame\CxFrame\CxFrame.vcxprojPfad 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