KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Environment: linux x64, compiler gcc 4.x Project has following structure: static library "slib" -- inside this library, there is static object "sobj" dynamic library "dlib" -- links statically "slib" executable "exe": -- links "slib" statically -- links "dlib" dynamically at end of the program, "sobj" is destructed twice. That behaviour is expected, BUT it is destructed twice at same memory address, i.e. same "this" in destructor - as the result there is double destruction problem. I think it is due some symbol overlapping. What the solution for that conflict? Maybe some linking option? Here is test case: main_exe.cpp #include <cstdlib> #include "static_lib.h" #include "dynamic_lib.h" int main(int argc, char *argv[]) { stat_useStatic(); din_useStatic(); return EXIT_SUCCESS; } static_lib.h #ifndef STATIC_LIB_H #define STATIC_LIB_H #include <cstdio> void stat_useStatic(); struct CTest { CTest(): status(isAlive) { printf("CTest() this=%d\n",this); } ~CTest() { printf("~CTest() this=%d, %s\n",this,status==isAlive?"is Alive":"is Dead"); status=isDead; } void use() { printf("use\n"); } static const int isAlive=12385423; static const int isDead=6543421; int status; static CTest test; }; #endif static_lib.cpp #include "static_lib.h" CTest CTest::test; void stat_useStatic() { CTest::test.use(); } dynamic_lib.h #ifndef DYNAMIC_LIB_H #define DYNAMIC_LIB_H #include "static_lib.h" #ifdef WIN32 #define DLLExport __declspec(dllexport) #else #define DLLExport #endif DLLExport void din_useStatic(); #endif dynamic_lib.cpp #include "dynamic_lib.h" DLLExport void din_useStatic() { CTest::test.use(); } </
Tags (comma-separated)
Save Edits
Cancel