Das ist knifflig (zumindest für mich

, vielleicht undurchführbar. Aber ich versuche Sie zu fragen.
Ich habe diese C-Shared-Bibliothek:
Code: Select all
#include
#include
static int variable = -666;
int get_value() {
return variable;
}
void print_pointer_to_get_value() {
printf("pointer_to_get_value: %p\n", &get_value);
}
So kompiliert (unter Linux):
Code: Select all
gcc -fPIC -c -O2 shared.c && gcc -shared -o shared.so shared.o
Jetzt lade ich die Bibliothek und rufe print_pointer_to_get_value() auf:
Code: Select all
>>> import ctypes
>>> so = ctypes.cdll.LoadLibrary('./shared.so')
>>> so.print_pointer_to_get_value()
pointer_to_get_value: 0x7f46e178f700
Ich möchte von ctypes die tatsächliche Adresse der get_value-Funktion als Ganzzahl erhalten, wie sie von print_pointer_to_get_value() gedruckt wird.
Mein letztes Ziel ist es, diese Adresse in ein Cython-Modul zu verschieben und diese Funktion innerhalb einer „Nogil“-Cython-Funktion aufzurufen. Ich muss die .so-Bibliothek zur Laufzeit laden, daher kann ich mein Cython-Modul nicht kompilieren und es mit der Bibliothek verknüpfen.
Vielen Dank.
Das ist knifflig (zumindest für mich :-), vielleicht undurchführbar. Aber ich versuche Sie zu fragen.
Ich habe diese C-Shared-Bibliothek:
[code]#include
#include
static int variable = -666;
int get_value() {
return variable;
}
void print_pointer_to_get_value() {
printf("pointer_to_get_value: %p\n", &get_value);
}
[/code]
So kompiliert (unter Linux):
[code]gcc -fPIC -c -O2 shared.c && gcc -shared -o shared.so shared.o
[/code]
Jetzt lade ich die Bibliothek und rufe print_pointer_to_get_value() auf:
[code]>>> import ctypes
>>> so = ctypes.cdll.LoadLibrary('./shared.so')
>>> so.print_pointer_to_get_value()
pointer_to_get_value: 0x7f46e178f700
[/code]
Ich möchte von ctypes die tatsächliche Adresse der get_value-Funktion als Ganzzahl erhalten, wie sie von print_pointer_to_get_value() gedruckt wird.
Mein letztes Ziel ist es, diese Adresse in ein Cython-Modul zu verschieben und diese Funktion innerhalb einer „Nogil“-Cython-Funktion aufzurufen. Ich muss die .so-Bibliothek zur Laufzeit laden, daher kann ich mein Cython-Modul nicht kompilieren und es mit der Bibliothek verknüpfen.
Vielen Dank.