使用 swig 包装 C++ 时加载符号的链接范围对于蟒蛇

发布于 2024-12-01 11:08:36 字数 287 浏览 0 评论 0 原文

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

(我从 man dlopen(3) 得到“本地”的定义)

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

I have a C++ library that I am wrapping with SWIG to make accessible in python. It is my understanding (from experience) that when SWIG wraps a C++ library in python, upon loading it places the C++ library symbols in a "local" scope. That is - a scope which does not enable future dynamically linked libraries to find the symbols.

(I'm getting this definition of "local" from man dlopen(3) )

Is there any way to get SWIG to place these symbols into the "global" scope, such that any future dynamically linked libraries can find them?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

未央 2024-12-08 11:08:36

您可以通过调用 RTLD_GLOBAL 标志创建 python dlopen 共享对象。 setdlopenflags" rel="nofollow">setdlopenflagssys 中,例如:

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

在加载模块之前。 (有一个 关于 swig-users 的讨论

You can make python dlopen shared objects with the RTLD_GLOBAL flag by calling setdlopenflags in sys, e.g.:

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

before your module is loaded. (There's a discussion on swig-users about this)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文