From 6036c027bf04c5e90be3951128eea8b00bc771a9 Mon Sep 17 00:00:00 2001 From: Tigran Gasparian Date: Fri, 31 Aug 2018 10:53:46 +0200 Subject: [PATCH 1/3] Uses dlmopen() instead of dlopen() in b3PluginManager.cpp. This allows plugins to be loaded in a separate namespace, avoiding symbol conflicts. --- examples/SharedMemory/b3PluginManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/SharedMemory/b3PluginManager.cpp b/examples/SharedMemory/b3PluginManager.cpp index 52f7b05b8..a4fca03f7 100644 --- a/examples/SharedMemory/b3PluginManager.cpp +++ b/examples/SharedMemory/b3PluginManager.cpp @@ -21,7 +21,7 @@ typedef void* B3_DYNLIB_HANDLE; - #define B3_DYNLIB_OPEN(path) dlopen(path, RTLD_NOW | RTLD_GLOBAL) + #define B3_DYNLIB_OPEN(path) dlmopen(LM_ID_NEWLM, path, RTLD_LAZY) #define B3_DYNLIB_CLOSE dlclose #define B3_DYNLIB_IMPORT dlsym #endif From f132b4d16bcc65981bdddc8ec80262be687d7fd9 Mon Sep 17 00:00:00 2001 From: Tigran Gasparian Date: Fri, 31 Aug 2018 15:33:08 +0200 Subject: [PATCH 2/3] Only make the change for Linux, since OSX doesn't have dlmopen() --- examples/SharedMemory/b3PluginManager.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/SharedMemory/b3PluginManager.cpp b/examples/SharedMemory/b3PluginManager.cpp index a4fca03f7..9e61e1859 100644 --- a/examples/SharedMemory/b3PluginManager.cpp +++ b/examples/SharedMemory/b3PluginManager.cpp @@ -21,7 +21,11 @@ typedef void* B3_DYNLIB_HANDLE; +#ifdef __APPLE__ #define B3_DYNLIB_OPEN(path) dlmopen(LM_ID_NEWLM, path, RTLD_LAZY) +#else + #define B3_DYNLIB_OPEN(path) dlopen(path, RTLD_NOW | RTLD_GLOBAL) +#endif #define B3_DYNLIB_CLOSE dlclose #define B3_DYNLIB_IMPORT dlsym #endif From 9799f356dec278659780242e51dda4d908af8a97 Mon Sep 17 00:00:00 2001 From: Tigran Gasparian Date: Fri, 31 Aug 2018 15:35:35 +0200 Subject: [PATCH 3/3] . --- examples/SharedMemory/b3PluginManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/SharedMemory/b3PluginManager.cpp b/examples/SharedMemory/b3PluginManager.cpp index 9e61e1859..cd50f9883 100644 --- a/examples/SharedMemory/b3PluginManager.cpp +++ b/examples/SharedMemory/b3PluginManager.cpp @@ -22,9 +22,9 @@ typedef void* B3_DYNLIB_HANDLE; #ifdef __APPLE__ - #define B3_DYNLIB_OPEN(path) dlmopen(LM_ID_NEWLM, path, RTLD_LAZY) -#else #define B3_DYNLIB_OPEN(path) dlopen(path, RTLD_NOW | RTLD_GLOBAL) +#else + #define B3_DYNLIB_OPEN(path) dlmopen(LM_ID_NEWLM, path, RTLD_LAZY) #endif #define B3_DYNLIB_CLOSE dlclose #define B3_DYNLIB_IMPORT dlsym