Kaydet (Commit) 08052c7b authored tarafından Guido van Rossum's avatar Guido van Rossum

Add the flag RTLD_GLOBAL to the dlopen() options.

This exports symbols defined by the loaded extension to other
extensions (loaded later).

(I'm not quite sure about this but suppose it can't hurt...)
üst c425d2f8
......@@ -171,6 +171,9 @@ typedef void (*dl_funcptr)();
#ifndef RTLD_LAZY
#define RTLD_LAZY 1
#endif
#ifndef RTLD_GLOBAL
#define RTLD_GLOBAL 0
#endif
#define SHORT_EXT ".so"
#define LONG_EXT "module.so"
#endif /* USE_SHLIB */
......@@ -362,12 +365,13 @@ _PyImport_LoadDynamicModule(name, pathname, fp)
#ifdef RTLD_NOW
/* RTLD_NOW: resolve externals now
(i.e. core dump now if some are missing) */
void *handle = dlopen(pathname, RTLD_NOW);
void *handle = dlopen(pathname, RTLD_NOW | RTLD_GLOBAL);
#else
void *handle;
if (Py_VerboseFlag)
printf("dlopen(\"%s\", %d);\n", pathname, RTLD_LAZY);
handle = dlopen(pathname, RTLD_LAZY);
printf("dlopen(\"%s\", %d);\n", pathname,
RTLD_LAZY | RTLD_GLOBAL);
handle = dlopen(pathname, RTLD_LAZY | RTLD_GLOBAL);
#endif /* RTLD_NOW */
if (handle == NULL) {
PyErr_SetString(PyExc_ImportError, dlerror());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment