uss ich alle abhängigen DLLs in den bin-Ordner des JDK lege

Meine Java-Anwendung hängt von einer DLL ab, und diese DLLdes Weitere kommt drauf anlibstdc++-6.dll.

Ich versuchte zu

placed thelibstdc++-6.dll in einem Ordnerund legen Sie den Ordner in% PATH%

Dann treffe ich diejava.lang.Unsatisfied LinkError: The specified procedure could not be found beim Starten der Anwendung von Eclipse.

Aber wenn ich daslibstdc++-6.dll in dasJDK's bin folder, sagenC:\Java\jdk1.6.0_45_32bit\bin. Es funktioniert gut

Aber ich möchte den JDK-Ordner nicht verschmutzen. Ich erinnere mich, dass Windows% PATH% durchsucht, um abhängige DLLs zu finden. Warum kann ich% PATH% in dieser Ausgabe nicht verwenden?

Update 1

In Windows gibt es 2 verschiedene% PATH% -Umgebungsvariablen.

User VariablenSystemvariablen

Ich habe geradeversehentlic finde das

Wenn ich den Ordner der DLL auf Benutzer% PATH% lege, kann er nicht gefunden werden.

Wenn ich den Ordner der DLL auf System% PATH% lege, funktioniert es.

Warum

Update 2

Von diesem Thread inspiriert: System versus Benutzer-PATH-Umgebungsvariable ... winmerge funktioniert nur, wenn ich den Pfad zum Benutzer PATH @ hinzufüg

Ich frage mich, ob mein Benutzer% Path% vielleicht @ iszu lan. Also habe ich den Ordnerpfad mit meiner abhängigen DLL aus dem @ verschobeEnd von Benutzer% PATH% anAnfan. Es funktioniert jetzt

Zunächst komme ich zu dem Schluss, dass jemand, der den DLL-Suchalgorithmus von Windows implementiert hat, ein Kürzungsproblem hat. Und ichfas Betrachten Sie es als einen weiteren nervigen Windows-Bug.

Aber ich habe eine andere Windows-Anwendung geschrieben, die ähnliche DLL-Abhängigkeiten aufweist, um meine Vermutung zu bestätigen. Diese Anwendung funktioniert gut! Also muss ich meine Schlussfolgerung überprüfen.

Ich habe meinen Benutzer% PATH% -Eintrag nacheinander überprüft und den Ordner an jedem möglichen Speicherort abgelegt. Und schließlich finde ich dasUrsach.

Ich habe einC:\MinGW\bin -Eintrag in Benutzer% PATH%, der zufällig ein @ enthälibstdc++-6.dll (977KB) aber leider nicht kompatibel mit der ich brauche(825KB). Es funktioniert nur, wenn ich meinen Ordner vor MinGW platziere. Es ist also tatsächlich eine DLL-Kollision während der% PATH% -Auflösung.

Jetzt scheint das Problem behoben zu sein. Aber es kommt noch eine Frage auf, muss ich hin und her wechseln, wenn ich sowohl meine DLL als auch das MinGW verwenden möchte?

Update 3

Bitte überprüfen Sie den Kommentar von @AndyThomas. Er erwähnte mitSystem.loadLibrary() für direkte und indirekte DLLs. Auf diese Weise brauchen wir uns nur um das @ zu kümmerjava.library.path Eigentum. Ich denke, das ist eine endgültige Lösung.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage