问题标签 [swig]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1093 浏览

c++ - Swig 和引用计数的 C++ 类

我的许多 C++ 对象通过 AddRef 和 FreeRef 方法实现了引用计数。如果 FreeRef 将引用计数减少到 0,则对象将删除其自身。

所有返回引用计数对象的方法都不会增加引用。这使得它变得简单,因为智能指针可以简单地在接收到指针时增加计数,并在它们不再引用它时减少计数。例如:

我在想也许我可以告诉 SWIG 只在内部使用我现有的智能指针来处理这些可能有效的对象,但是我也不知道该怎么做:(

0 投票
3 回答
12288 浏览

python - 一个微不足道的 Python SWIG 错误问题

我正在尝试让 Python 与 swig 一起运行以执行 C/C++。我在这里运行教程,“构建 python 模块”。当我打电话时

我收到一个错误:

它实际上确实创建了一个 example.o 文件,但它不起作用。我使用的是 python2.5 而不是示例中的 2.1,这是一个问题吗?错误(其他一切都只是一个“警告”)说明了错误的平台。这是一台 64 位机器;这是一个问题吗?我的 gcc 是否为我的机器配置错误?我该如何度过这个难关?

更新:我仍然有问题。我如何实际实施这个“修复”?

0 投票
3 回答
645 浏览

python - 使用 Swig、python 包装 Patricia 尝试的问题

我正在尝试包装 Patricia Tries(Perl 的 NET::Patricia)以在 python 中公开。我在其中一门课上遇到困难。

因此,从 python 中查看的 patricia 节点(下图)的实例具有“数据”属性。阅读它很好,但写入它会中断。

具体来说:

现在我的C很弱。从我在 SWIG 书中读到的内容来看,我认为这意味着我需要向它传递一个指向数据的指针。根据

此外,如果您需要将原始指针值传递给一些外部 python 库,您可以通过将指针对象转换为整数来实现...但是,反向操作是不可能的,即,您无法构建 Swig来自原始整数值的指针对象。

问题:

  1. 我理解正确吗?
  2. 我该如何解决这个问题?% 扩展了吗?打字机?细节会很有帮助。

笔记:

  1. 我无法更改 C 源代码,但我可以在其他 .h 文件或接口 .i 文件中对其进行扩展。
  2. 据我了解,“数据”字段应该能够包含“任何东西”,以获得我不知道的“任何东西”的一些合理价值。
0 投票
3 回答
17828 浏览

python - 适用于 Windows 的 Python SVN 绑定

在哪里可以找到适用于 Windows 的预编译 Python SWIG SVN 绑定?

0 投票
2 回答
2095 浏览

c++ - 是否可以拆分 SWIG 模块进行编译,但在链接时重新加入?

大约两年前,当我第一次实现我们的 SWIG 绑定时,我遇到了这个问题。一旦我们暴露了大量代码,我们就到了 SWIG 会输出 C++ 文件的地步,编译器无法处理它们。我可以解决这个问题的唯一方法是将接口拆分为多个模块并分别编译它们。

这有几个缺点:

• 每个模块都必须了解其他模块的依赖关系。我有一个脚本来生成处理这方面的接口文件,但它增加了额外的复杂性。

• 每个附加模块都会增加动态链接器加载代码所需的时间。我添加了一个导入所有子模块的init .py 文件,这样代码被拆分的事实对用户来说是透明的,但始终可见的是加载时间长。

我目前正在审查我们的构建脚本/构建过程,我想看看我是否能找到比我现在更好的解决方案来解决这个问题。理想情况下,我将拥有一个包含所有包装代码的共享库。

有谁知道我如何使用 SWIG 实现这一目标?我已经看到了一些用 Ruby 为特定项目编写的自定义代码,其中的输出经过后处理以使其成为可能,但是当我查看 Python 包装器的可行性时,它看起来并不那么容易。

0 投票
2 回答
2556 浏览

python - 调试 Python 的 swig 扩展

除了做之外,还有其他方法可以调试 swig 扩展吗

?

我已经包装了遗留库libkdtree++并遵循了所有与 swig 相关的内存管理点(借用 ref 与自己的 ref 等)。但是,我仍然不确定我的绑定是否没有占用内存。能够逐步调试每个公开的函数会很有帮助:从 Python 开始,然后通过 C 胶水绑定到 C 空间,然后返回。

是否已经有这种可能?

0 投票
3 回答
1994 浏览

c++ - 通过 Swig 在 C++ 和 Lua 之间传递变量

我正在开发一个包含大量类(150 多个)的 C++ 项目,每个类都有 10 到 300 个左右的字段。我真的很想能够提供一个脚本接口用于测试目的,这样我就可以编写不需要任何重新编译的回调。我想在 Lua 中执行此操作,因为我对它的 C API 比对 Python 的更熟悉,但如果它可以避免头痛,我很乐意在 Python 中执行此操作。

我已经掌握了如何从我的 C++ 调用 Lua 函数,反之亦然,并且我知道如何来回传递基本数据类型。我的问题是如何使用 SWIG 在两者之间共享用户指定的数据类型。

例如,在我的 C++ 中的某个时刻,我可能想要评估具有 250 个字段的对象中的几条成员数据。我希望能够将该对象交给 Lua,然后(希望?)使用生成的 SWIG 包装器来操作该对象,显示某些字段,然后将(可能更改的)对象传递回 C++ 以继续使用.

我还希望能够使用包装器在 Lua 中实例化对象的实例,并将其传递给 C++ 以用作对象的普通 C++ 版本。

这可能吗?有人可以指出我的教程或明确的例子吗?

谢谢你的尽心帮助!

0 投票
2 回答
1066 浏览

lua - luaopen_my_example 在编译 swig 包装器后未定义

我刚刚潜入 SWIG 作为创建 Lua 绑定的一种方法,但遇到了障碍。我制作了我的接口文件并从中构建了一个共享对象文件,没有任何问题。但是,当我运行 Lua 并尝试请求共享对象时,我得到以下信息:

堆栈回溯:

我似乎在网上找不到任何描述这种情况的东西,所以我想我会在这里发帖。那里有 SWIG 大师吗?我要包装的课程有几千行(并且是专有的),或者我会在这里发布。

谢谢!:D

0 投票
1 回答
735 浏览

inheritance - (SWIG / Lua) 如何访问 swig_lua_class 中的基类/父类列表

我注意到在为给定的一组类生成的 SWIG 包装器中,SWIG 保留了该类继承自的所有父类的 C 字符串表示形式的列表。(char ** base_names)。我知道有一个功能

这将返回给定变量数据类型的字符串表示形式。是否还有一个函数可以将父类的表作为字符串返回?如果没有,有没有简单的方法来编写这个函数?我完全不熟悉 SWIG 的内部运作。

谢谢!

0 投票
3 回答
3325 浏览

c++ - 无法捕获异常!

我正在使用 swig 用 python 包装一个 C++ 库中的类。它总体上可以工作,但是从库中抛出了一个异常,我似乎无法在 swig 界面中捕获它,所以它只会使 python 应用程序崩溃!

PyMonitor.cc 类描述了所需类 Monitor 的 swig 接口。如果连接失败,Monitor 的构造函数会抛出异常。我想在 PyMonitor 中处理这个异常,例如:

PyMonitor.cc:

但是,connect() 方法永远不会捕获异常,我只是得到一个“在抛出 ... 后调用终止”错误,然后程序中止。

我对 swig 了解不多,但在我看来,这一切都很好 C++,异常应该在终止程序之前传播到 connect() 方法。

有什么想法吗?