问题标签 [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 回答
247 浏览

python - python/lua 的 Swig 绑定无法正确初始化成员数据

我正在尝试为一组 C++ 类构建一组 Lua 绑定,但一直在玩弄 Python,看看我是否能得到更好的结果。在这两种语言中,绑定似乎都有效,但是,当我初始化包含其他类成员的类的实例时,似乎不能保证这些数据成员被初始化。

例如,上课:

当我为这样的类生成绑定时,我可以执行如下语句:

我将预期的垃圾值打印到屏幕上。但是,如果我尝试打印有关 OtherClass 的实例的任何内容,很明显它已“被排除”——在 Lua 中它根本没有元表,而在 Python 中执行 dir(var.oc) 只提供默认函数。但是,如果我这样做:

oc metatable / dir(oc) 调用是我所希望的,它可以按预期处理。

任何人都可以提供任何见解,为什么只有 - 一些 - 成员数据被初始化?

谢谢!

0 投票
2 回答
12885 浏览

python - 检测到 Swig / Python 内存泄漏

我有一个非常复杂的类,我正在尝试在 SWIG 中制作 Python 包装器。但是,当我在 Python 中创建项目的实例时,我无法在没有收到消息的情况下初始化某些数据成员:

有谁知道我需要做些什么来解决这个问题?有没有我可以用来生成析构函数的标志?

0 投票
2 回答
840 浏览

c++ - $stdin 与使用 swig、C++ 和 Ruby 的 std::istream 兼容

我在 C++ 中有一个函数,它以 std::istream 作为输入:

使用 SWIG,我已经将它绑定到 Ruby,但是 Ruby 的 $stdin 变量与 C++ 中的流类之类的东西根本不同,所以我不确定如何 1) 以我的方式将 C++ 类公开给 Ruby可以使用 $stdin,或者 2) 将 $stdin 转换为 C++ 类可以理解的内容。

有人有将 C++ 中的 iostream 绑定到 Ruby 的经验吗?

谢谢。

0 投票
2 回答
240 浏览

lua - swig 包装变量的基本分配失败

我使用 swig 创建了一个包含大量包装 C++ 类的 lua 模块。包装器的生成和编译(使用 -Wall)没有任何问题。但是,在我发现的几个地方,我遇到了以下问题:成员数据的基本分配失败。

如果我运行:

然后我可以验证附加到“a”的元表是否包含其所有成员数据(在本例中,字段“b”和“c”分别属于类类型 ClassB 和 ClassC。)

我可以进一步做:

它成功地将 b 重新分配给 ClassB() 的新实例。但是,当我去做时:

我收到错误消息:

好像“=”右侧的表达式是与包含要重新分配的数据字段的元素具有相同类型的对象。我确定我一定错过了一些简单的东西,但是我已经把头撞在墙上几个小时了,但无济于事。

有人有什么想法吗?谢谢!

0 投票
2 回答
1972 浏览

lua - Swig 类型转换为派生类?

我注意到 Swig 提供了一大堆函数来允许将对象类型转换为它们的父类。但是,在 C++ 中,可以生成如下函数:

其中“A”是“B”和“C”类的父类。然后可以在方便时将返回的指针类型转换为“B”类型或“C”类型,例如:

有没有什么方法可以在运行时使用包装器在脚本语言中对从通用指针生成函数接收到的对象进行类型转换?(在我的例子中,Lua?)我有一个函数可以生成大约一百个可能的类中的一个,我想避免编写必须在 C++ 中维护的巨大开关结构。在我收到通用指针的地方,我还有一个我想将其转换为的数据类型的字符串表示形式。

有什么想法吗?谢谢!

- 编辑 -

我注意到 SWIG 提供为我的所有类生成复制构造函数。如果我让它生成这些,我可以执行以下操作吗?:

然后让 var 成为知道它是继承类的实例的继承类的实例?

0 投票
2 回答
956 浏览

c - 如何使用 SWIG 在 C 中构建 Perl 哈希?

我正在尝试从 C 库中创建 Perl 哈希。这是我到目前为止所得到的:

尝试一下:我没有得到任何对我有意义的东西:

想法?

0 投票
2 回答
355 浏览

python - 当我创建共享库 shim 而不是可执行文件时,如何满足对 stat 的第 3 方共享库引用?

我是内部 Python 系统的新维护者,该系统通过使用 swig 和 setup.py 脚本的组合创建的共享库 shim 使用一组 3rd 方共享 C 库。直到最近,这一直运作良好。

第 3 方共享 C 库已针对新功能进行了更新,现在当我尝试运行我们的主要 Python 程序(导入生成的共享库 shim)时,在干净构建后出现以下运行时错误:

-sh-3.00$ python ams.py

我发现了一个 1999 年的讨论线程,它解释了问题在于 stat 不存在于 libc.so.6 中,而是存在于 libc_nonshared.a 中,并提供了一个解决方案:链接 c 库,通过将 -lc 添加到您的构建命令行。

我在 setup.py 脚本中的库列表中添加了“c”,但这不会改变我的结果。我怀疑这是因为我正在创建一个共享库 shim 而不是可执行文件。

给定我的构建环境,如何满足第 3 方共享库对 stat 的引用?

我的构建系统是:

-sh-3.00$ lsb_release -a

我的 gcc 版本是:

-sh-3.00$ gcc --version

我的 Python 版本是:

-sh-3.00$ 蟒蛇 -V

0 投票
1 回答
3100 浏览

java - Swig c++ w/Java 在多态回调函数上丢失类型

可能重复:
SWIG Java Retaining Class information of the objects bouncing from C++

问题:为什么我的 C++ swigged 对象在传递给 Java 回调函数时会丢失其类型?

设置:我采用 Swig Java 示例进行回调,并添加了一个要传递给回调的对象run(Parent p)。回调按预期工作,但是当我传递一个Child对象时,Java 似乎失去了它的类型并认为Parent它应该是它的类型Child。这是基于Swig java 回调示例

系统信息:带有 Swig 1.3.33 的 Ubuntu 8.04 - 万一最新的 Swig 有所作为,我也测试了 1.3.39 - 没有效果。

输出

正如您在输出中看到的那样 - 对象实际上是 Child 类型 - 但它的 Java 类名称是 Parent - 这是错误的......

如果您查看 Java 回调run(Parent p),您可以看到我在哪里获取 Java 类,并且 Java 确实认为这个对象是类型的Parent- 尝试将其强制转换为 Child 将按ClassCastException预期抛出。

代码

这可能是 Swig 中的一个错误 - 但我希望这是我对 C++ 类型/转换的愚蠢......

任何想法将不胜感激!

0 投票
1 回答
1571 浏览

c++ - Lua bindings to C++ and garbage collection

Ok, here's a problem I'm having.

I have Lua bindings to a rendering engine that has an internal render manager that keeps its own track of pointers for the render scene and manages them. The problem is that when I'm using it from Lua, if i don't keep a Lua reference to every single object i add to the C++ render manager, it starts to garbage collect the pointers and of course cause things to crash. I don't particularly want to have to save every single reference to every single thing i create. Is there a way to force Lua to not garbage collect certain things? Are there any other ways I can get around this problem?

I'm generating the Lua bindings with SWIG.

0 投票
2 回答
8779 浏览

java - 如何诊断 Windows Vista 中的 Java JNI EXCEPTION_ACCESS_VIOLATION 错误

我们有一个 Java 应用程序,它通过 JNI 使用一些 C++ 库。该应用程序过去在 Windows XP 中运行良好,但在 Windows Vista 中无法运行,它只是立即使 JVM 崩溃。

我们还使用 SWIG 编写了 C++ 库并生成了 JNI 绑定。

我们对从哪里开始寻找解决问题的方法有点不知所措。

这是我们得到的 EXCEPTION_ACCESS_VIOLATION: