Hi!
Ich bin dabei ein Windowsprogramm auf Linux zu portieren, und dabei ergab sich ein problem miteiner shared librarie.
Grundsätzlicher Aufbau des Prog.:
-mehrere shared libraries, zum teil gegeneinander gelinkt
-eine shared lib. die gegen alle anderen gelinkt ist
-einige programme die gegen die lib. gelinkt sind die alle anderen „in sich hat“
Auf grund der Tatsache dass in dem Windows-Dll’s WinAPI Funktionen verwendet wurden, musst ich auf die wine-lib zurückgreifen, welche ebenfalls von beinahe allen anderen libs verwendetwird.
Das eigentliche Problem:
Das gesamte SW-Packet greift auf eine ORACLE-DB zu. Hierfür wurden einige Funktionen implementiert, die diverse DB-Operationen ausführen. Wird nun die Funktion aufgerufen, die eine Verbindung zur DB herstellt, bricht das programm mit SIGSEGV ab. Laut Debugger befand sich das Programm zu diesem Zeitpunkt in einer Funktion der libwsock32.so, also in der WINELIB.
Es werden noch einige Meldungen ausgegeben, die von Wine-Funktionen namens pthread_cond_init und pthread_cond_destroy ausgegeben werden.
Diese Funktionen mit gleichem Namen(gleiche Parameter) sind jedoch auch in einer lib namens libpthread.so zu finden.
Ich dacht mir dann folgendes, ich schreibe ein kleines Programm, nur main() dass die Funktion zum verbinden mit der Datenbank aufruft. Dass ganze ohne wine-lib (wird für datenbank-verbindung alleine nicht benötigt). Und siehe da es funktioniert!
Laut debugger wird nähmlich die Fkt. aus der libpthread.so verwendet. Wenn ich dann versuche die libwsock32.so dazuzulinken, erhalte ich prompt das selbe Verhalten: die Oraclelib ruft nicht die Fkt. in der system-lib sondern in der winelib auf.
Meine Frage also:
Wie bringe ich meine Programme dazu nicht dir Fkt. in der WineLib zu verwenden.
Gibt es eine Mögl. zu bestimmen in welcher lib ein functioncall landen soll?
Oder kann mir irgendjemand einen anderen Tip geben.
Besten Dank im vorraus
mfg
Robert