我有一个C ++库,我用SWIG包装,以便在python中访问。我的理解(来自经验)当SWIG在python中包装C ++库时,在加载时将C ++库符号放在“本地”范围内。也就是说 - 一个范围不会使未来的动态链接库找到符号。
(我从man dlopen(3))
得到了“本地”的定义有没有办法让SWIG将这些符号放入“全局”范围,这样任何未来的动态链接库都可以找到它们?
答案 0 :(得分:2)
您可以通过调用dlopen
中的setdlopenflags
来制作带有RTLD_GLOBAL
标记的python sys
共享对象,例如:
sys.setdlopenflags(dl.RTLD_NOW | dl.RTLD_GLOBAL)
在加载模块之前。 (这里有一个discussion on swig-users)