Я понял, что могу реализовать части класса в разделяемой библиотеке, если символы загружаются при использовании.
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)