[boost managed_share_memory] Wie kann man dlsym nutzen?

25/09/2014 - 18:17 von Heinz-Mario Frühbeis | Report spam
Hallo,

z.Z. "krebse" ich an einer Möglichkeit herum in einem Programm [Prog_2]
das in einem eigenen Prozess làuft dlsym zu nutzen.

So hole ich (stark vereinfacht) ein Struct, das im Shared Memory liegt:
typedef struct{
void *PtrVoid; // Das ist der Pointer von dlopen und wird in einem
Programm [Prog_1] geholt.
int TestVal;
} tdStruct;

tdStruct nStruct* = Segment.find < tdStruct > (Name).first;

Wenn ich nun im Prog_1 dlsym aufrufe:
t_TestEx tmpFunk = (t_TestEx) dlsym(PtrVoid, Name);
nRet = tmpFunk(1); // Die Funktion gibt dann einen Wert + 2 zurück
dann ist nRet auch in der Tat = 3 (also 1 + 2).

Wenn ich das so aber in Prog_2 ablaufen lasse, dann stürzt Prog_2 bei
t_TestEx tmpFunk = (t_TestEx) dlsym(PtrVoid, Name);
ab.
Allerdings kann ich von tdStruct TestVal auch in Prog_2 setzen und
auslesen...also funktioniert es ja soweit. Und deshalb denke ich, daß es
an dlsym liegt.

Mit Gruß
Heinz-Mario Frühbeis
 

Lesen sie die antworten

#1 Rainer Weikusat
25/09/2014 - 18:46 | Warnen spam
Heinz-Mario Frühbeis writes:
z.Z. "krebse" ich an einer Möglichkeit herum in einem Programm
[Prog_2] das in einem eigenen Prozess làuft dlsym zu nutzen.

So hole ich (stark vereinfacht) ein Struct, das im Shared Memory liegt:
typedef struct{
void *PtrVoid; // Das ist der Pointer von dlopen und wird in
einem Programm [Prog_1] geholt.
int TestVal;
} tdStruct;

tdStruct nStruct* = Segment.find < tdStruct > (Name).first;

Wenn ich nun im Prog_1 dlsym aufrufe:
t_TestEx tmpFunk = (t_TestEx) dlsym(PtrVoid, Name);
nRet = tmpFunk(1); // Die Funktion gibt dann einen Wert + 2 zurück
dann ist nRet auch in der Tat = 3 (also 1 + 2).

Wenn ich das so aber in Prog_2 ablaufen lasse, dann stürzt Prog_2 bei
t_TestEx tmpFunk = (t_TestEx) dlsym(PtrVoid, Name);
ab.



Hier waere es hilfreich, ein minimales, vollstaendiges (dh uebersetz-
und ausfuehrbares) Beispiel, das das Phaenomen demonstriert, zu posten.

Ähnliche fragen