Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

dlclose() does not call the destructor of global objects

Tags:

plugin1.cpp:

#include <iostream>  static class TestStatic { public:   TestStatic() {      std::cout << "TestStatic create" << std::endl;   }   ~TestStatic() {      std::cout << "TestStatic destroy" << std::endl;   } } test_static; 

host.cpp

#include <dlfcn.h> #include <iostream> int main(int argc,char *argv[]) {    void* handle = dlopen("./plugin1.so",RTLD_NOW | RTLD_LOCAL );    dlclose(handle);    return 0; } 

build and run:

>g++ -c plugin1.cpp -o plugin1.o -fPIC >g++ -shared plugin.o -o plugin1.so >g++ host.cpp -o host -ldl >./host >TestStatic create >Segmentation fault 

why TestStatic::~TestStatic called at 'exit()' but not at 'dlclose()' ?