使用swig为C ++包装python时链接加载符号的范围

时间:2011-08-25 18:52:01

标签: swig dynamic-linking

我有一个C ++库,我用SWIG包装,以便在python中访问。我的理解(来自经验)当SWIG在python中包装C ++库时,在加载时将C ++库符号放在“本地”范围内。也就是说 - 一个范围不会使未来的动态链接库找到符号。

(我从man dlopen(3)

得到了“本地”的定义

有没有办法让SWIG将这些符号放入“全局”范围,这样任何未来的动态链接库都可以找到它们?

1 个答案:

答案 0 :(得分:2)

您可以通过调用dlopen中的setdlopenflags来制作带有RTLD_GLOBAL标记的python sys共享对象,例如:

sys.setdlopenflags(dl.RTLD_NOW | dl.RTLD_GLOBAL)

在加载模块之前。 (这里有一个discussion on swig-users