C ++: реализация методов класса в отдельной разделяемой библиотеке

Я понял, что могу реализовать части класса в разделяемой библиотеке, если символы загружаются при использовании.

myclass.h
---

class C {
void method();
}

main.cpp
---

#include "myclass.h"
int main() {
    //dynamically load mylib.so using dlopen/dlsym/dlclose
        ...
    C *c = new C();
    c->method();
    delete c;
}

mylib.so compiled separately:
====
mylib.cpp
---

#include "mylib.h"
void C::method() {
...
}

Это прекрасно работает.

Однако, как только я закончил использовать C :: method (), я хотел бы выгрузить его, чтобы я мог изменить, перекомпилировать и перезагрузить его без перезапуска основной программы

int main() {
    //dynamically load mylib.so using dlopen/dlsym/dlclose
        ...
    C *c = new C();
    c->method();
    delete c;
    // close the lib, remove the handle...
         ....
    char pause;
    cin << pause; // before carrying on change the C::method, recompile it

    //dynamically load *Again* mylib.so using dlopen/dlsym/dlclose
        ...
    C *c = new C();
    c->method();
    delete c; 
}

Проблема в том, что он не выгружает библиотеку при выполнении первого dlclose, вероятно, потому, что существует экземпляр моего класса C. Есть ли способ заставить это?

(с использованием g ++ 4.2.3, в Linux Ubuntu 10.04)

7
задан Ben 10 January 2012 в 16:22
поделиться