Third-Party API anspreschen

Im Detail funktioniert das LoadLibrary von Java heraus nicht. Bisher habe ich alle Anwendungen in VC++ 2008 Express Edition entwickelt und anschließend mit dem GCC Compiler kompiliert, dann erst hat es auch auf einem anderen Gerät funktioniert.

Konkret die Fehlermeldung:

"Diese Anwendung konnte nicht gestartet werden, weil die Anwendungskonfiguration nicht korrekt ist".
Diese Meldung erscheint wenn ein Manifest nicht gefunden werden kann. Das Einbetten eines Manifestes bzw. die Notwendigkeit kann man aber beim Visual Studio irgendwo einstellen.
Wird die DLL aber nicht gefunden, kommt folgende Fehlermeldung:

"no XFSTest in java.library.path"

Im GCC kompilieren funktioniert leider nicht:

Code:
gcc -mno-cygwin -IC:/Programme/Java/jdk1.5.0_13/include -IC:/Programme/Java/jdk1.5.0_13/include/win32 -I"C:/Programme/XFS Manager/XFS/SDK/INCLUDE" -L"C:/Programme/XFS Manager/XFS/SDK/LIB" -lmsxfs -lxfs_conf -lxfs_supp -Wl,--add-stdcall-alias -shared -o Z:/XFSTest/XFSTest.dll C:/XFSTest/XFSTest/dllmain.c

und Fehlermeldung:

Code:
/cygdrive/c/DOKUME~1/rpri236/LOKALE~1/Temp/ccL3nnN1.o:dllmain.c:(.text+0x40): un
defined reference to `_WFSStartUp@8'
collect2: ld returned 1 exit status
Ich vermute mal die WFSStartUp Funktion ist in der msxfs Bibliothek definiert...?!

Die Reihenfolge der Bibliotheken auf der Kommandozeile ist signifikant. Man sollte die Objektdateien und Bibliotheken immer so anordnen, dass zuerst die Dateien genannt werden die eine Bibliothek benötigen und danach die Bibliothek selbst - du hast es offenbar umgekehrt gemacht. Der Linker entfernt nämlich einfach Bibliotheken falls diese nicht vorher von irgendeinem Modul benötigt werden.

Da also die main.c die Hauptdatei ist und von allen anderen Bibliotheken abhängig ist, sollte diese Datei auf jeden Fall zuerst genannt werden.

Gruß
 
Guten Morgen!

So, es funktioniert jetzt auch auf dem Zielsystem. Habe mir mit Dependency Walker die Abhängigkeiten anzeigen lassen.

Das erste Problem war eine MSVCR90D.DLL ... die kam durch die Debug-Kompilierung Zustande. Auf Release war es auf einmal die MSVCR90.DLL - damit diese Abhängigkeit verschwindet, musste ich Unter den Projekteigenschaften > Konfigurationseigenschaften > C/C++ > Codegenerierung > Laufzeitbibliothek auf Multithreaded /MT stellen.

Besten Dank für die Hilfe!

Bille
 
Zurück