Chciałbym napisać trochę kodu C (dobrze, jeśli działa tylko na Linuksie), aby dynamicznie ładować nową bibliotekę współdzieloną, a następnie wywołać z niej metodę (do ustalenia w czasie wykonywania). Wydaje się, że jest to już możliwe, ponieważ java może dynamicznie ładować biblioteki macierzyste, a następnie wywoływać z nich metody.Jak załadować własną bibliotekę dynamicznie i wywołać metodę w nim?
Na przykład, chciałbym zrobić coś takiego:
int main() {
libinfo_t * lib_details = load_shared_library("libfoo.so");
run_method(lib_details, "bar", 7);
}
byłoby wywołać metodę 'bar' z argumentem 7 (bar to metoda opracowana w libfoo.so).
szczegóły przypadek użycia:
Chciałbym skompilować plik binarny, który ładuje wszystkie biblioteki współdzielone w katalogu i biegnie jakiś sposób od siebie, w kontekście pamięci oryginalnego programu. Chciałbym móc szybko włączyć lub wyłączyć współużytkowaną bibliotekę, dodając/usuwając ją z katalogu.
Dowód koncepcji:
Wydaje się to powinno być możliwe, w oparciu o sposób java udaje się połączyć z kodem dynamicznie JNI. Możesz użyć System.load() i załadować bibliotekę do wyboru. W połączeniu z kompilacją z pamięci wydaje się, że pozwoliłoby to uruchomić dowolną funkcję z dowolnej biblioteki. http://www.java2s.com/Code/Java/JDK-6/CompilingfromMemory.htm
Czego próbowałem:
Szukałem na stronie podręcznika dla „uselib”, co wydaje się użyteczne, ale nie jestem pewien, co zrobić z biblioteki raz mam załadowałem to.
Trochę googlowania zwróciło http://dyncall.org/, ale nie jest to dokładnie to, czego potrzebuję - ten projekt nadal wymaga wskaźnika funkcji, aby wywołać funkcję.
Byłbym wdzięczny za wskazówkę, gdzie szukać dalej, nawet bez konkretnej odpowiedzi. Dzięki!
C nie mają metod, ale funkcje. –