[C++/Linux] Problem mit shared library und ORACLE

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

Vielleicht eine dumme Idee, aber hast schon mal probiert einfach die Reihenfolge der Libs beim Aufruf des Compilers zu ändern?

Grüße, Robert

Hab ich schon versucht, wär schön wenns so einfach wäre!

Trotzdem danke,
mfg
Robert

Vielleicht eine dumme Idee, aber hast schon mal probiert
einfach die Reihenfolge der Libs beim Aufruf des Compilers zu
ändern?

Grüße, Robert

Hab ich schon versucht, wär schön wenns so einfach wäre!

Hab das jetzt ausprobiert, bei mir weigert sich eigentlich schon der Compiler zu kompilieren, wenn ich zwei gleichnamige Funktionen in zwei verschiedenen, eingebundenen Libraries habe.

Seltsam. :o)

Grüße, Robert

Hab das jetzt ausprobiert, bei mir weigert sich eigentlich
schon der Compiler zu kompilieren, wenn ich zwei gleichnamige
Funktionen in zwei verschiedenen, eingebundenen Libraries
habe.

Also bei mir gibts keine Compiler-Probleme.

Bin mir zwar nicht sicher, aber es könnte sein, dass es daran liegt, dass ich „gezwungenermaßen“ g++ verwenden muss.

mfg
Robert

Bin mir zwar nicht sicher, aber es könnte sein, dass es daran
liegt, dass ich „gezwungenermaßen“ g++ verwenden muss.

Hab auch gcc verwendet.

Tust du die Libraries statisch dazu linken, oder dynamisch?

Grüße, Robert

Hab auch gcc verwendet.

Ich verwende eben NICHT gcc, ich muß den g++ verwenden, weill
teile der Programme in C++ geschrieben sind.

Tust du die Libraries statisch dazu linken, oder dynamisch?

Sind alles dynamische Libraries

Ich verwende eben NICHT gcc, ich muß den g++ verwenden, weill
teile der Programme in C++ geschrieben sind.

Hmmmm, das ist eigentlich (seit gcc 2.0 oder so) dasselbe. Also gcc hat g++ inkludiert und kompiliert genauso C+±Programme.

Sind alles dynamische Libraries

Hmmmm, vielleicht liegt es daran, ich habs statisch dazugelinkt, eventuell checkt er das nur dann.

Grüße, Robert