Können *.DLL Dateien auch in einem Unterverzeichnis eines Programmes liefen?
-
Wenn man einen Ordner mit z.B. folgender Struktur hat:
f:\test\multithreading.c
f:\test\include\semaphore.h
f:\test\include\sched.h
f:\test\include\pthread.h
f:\test\libs\pthreadGC2.dllUnd den Header in der Quellcodedatei folgendermaßen einbindet:
#include "include/pthread.h"Dann läßt sich das Programm mit folgendem Befehl fehlerfrei compilieren
und linken:f:\test>gcc -o multithread.exe multithreading.c -std=c90 -Iinclude -Llibs -lpthreadGC2
Beim Ausführen des fertig compilierten Programms sucht es allerdings die *.dll Datei im gleichen Verzeichnis, in dem auch die ausführbare EXE Datei liegt und wenn sie sich die DLL Datei dort nicht befindet,
wie es hier in diesem Beispiel der Fall ist und wenn sie sich auch nicht im Windows Systemverzeichnis befindet, dann schlägt die Ausführung der Datei fehl.Frage:
Wie kann man ein Programm ausführen und die für das Programm notwendige DLL Dateien dennoch in einem Unterverzeichnis behalten?
Ist das unter Windows irgendwie möglich?
Und falls ja, welche Möglichkeiten gibt es dafür?Ich finde es nämlich leider etwas unschön, wenn die dem Programm mitgeführten *.DLL Dateien im gleichen Verzeichnis liegen müssen, die die ausführbaren Executables.
-
Hallo,
beim Linken ist wichtig, daß sich in den angegebenen Lib-Ordnern (-L) Dateien mit der Endung ".lib" befinden (d.h. es ist irrelevant, wo und ob sich überhaupt dann eine ".dll"-Datei dadrin befindet).
Erst beim Ausführen des Programmes werden die DLLs gesucht und dies geschieht (unter Windows) anhand der "PATH"-Umgebungsvariablen.Wenn du also DLLs in Unterordnern halten möchtest, dann mußt du entweder die globale PATH-Variable ändern, oder aber dir eine Batch-Datei schreiben, welche temporär den PATH erweitert:
set PATH=%PATH%;Libs multithread.exe
Und der Anwender muß nun die Batch-Datei starten (anstatt direkt das Programm).
-
Mehr Inormationen zur genauen Suchreihenfolge gibt es übrigens hier:
http://msdn.microsoft.com/en-us/library/7d83bc18(VS.80).aspxMfG SideWinder
-
wenn ich mich nicht irre, würde das Setzen von PATH in der bat-Datei dann auch den PATH von allen weiteren Prozessen beinflussen, die von der exe gestartet werden.
Das sollte man besser nicht machen
-
Dann halt noch einfacher:
Meinspiel/bin/Meinspiel.exe Meinspiel/bin/Vielelibs.dll Meinspiel/run.bat
Und in diese run.bat:
cd bin Meinspiel.exe
-
Das
cd bin
ist nichtmal nötig.
Windows sucht ja zuerst direkt neben der .exe, erst dann im aktuellen Verzeichnis.
-
Doch, ist schon notwendig. Da geht es ja nicht um die DLL-Auflösung...
MfG SideWinder
-
SideWinder schrieb:
Doch, ist schon notwendig. Da geht es ja nicht um die DLL-Auflösung...
MfG SideWinder
Warum funktioniert
bin\Meinspiel.exe
nicht?
-
Genaugenommen ist es nicht nur nicht notwendig, sondern auch nicht ausreichend. Was wenn jmd.
run.bat
mit einem "unpassenden" Working-Directory startet?
Also entwedercd /D "%~dp0bin" Meinspiel.exe
oder einfach
"%~dp0bin\Meinspiel.exe"
-
Helium schrieb:
SideWinder schrieb:
Doch, ist schon notwendig. Da geht es ja nicht um die DLL-Auflösung...
MfG SideWinder
Warum funktioniert
bin\Meinspiel.exe
nicht?
Guckst du ganz oben!