问题标签 [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.
c - 将 C 中的 Ruby 块与 SWIG 一起使用
我正在使用 SWIG 在 Ruby 中包装 C 接口。给定两个结构
如何创建一个#each
产生当前顶点的方法,以便我可以在 Ruby 中处理它。目前我的 SWIG 接口文件包含类似
在此先感谢您的帮助。
--t6d
swig - SWIG 在 AIX 上崩溃(使用 python,可能还有其他所有 SWIG 支持)
SWIG 可以在 AIX 上轻松编译和安装。不幸的是,一个简单的SWIG hello world(它也可以编译——但不是那么容易)会因分段错误或非法指令而崩溃(取决于编译/链接器过程的一些细节)。gcc 和 xlc(IBM c 编译器)都会发生这种情况。我只尝试了本地 AIX 链接器 ld,因为我的系统上没有安装同音词 GNU ld。
文件:example.c
文件:example.i
生成文件片段:
链接器步骤是有问题的。如果您按照教程中的示例进行操作,则应该这样做
不幸的是,由于几个原因,这不起作用。我相信 IBM/AIX 和开源社区对“共享库”的含义有着截然不同的想法。您从 AIX 本机链接器获得的最常见的共享对象 (so) 中根本没有任何符号(实际上大小小于 1kB)。从链接器获取损坏的输出也很容易(在这种情况下,链接时会出现很长的未解析符号列表,如下所示):
做一个应该做的事情,很明显解决方案是使用各种链接器选项进行黑客攻击,-berok
, -bnoentry
, -bexpall
, -brtl
, -bshared
, -bM:SRE
, -bexpfull
. 事实上,可以找到一些组合来创建非空的 .so 库,而不会产生错误。上面的 Makefile 片段中报告了其中一种组合(还有其他组合)。不幸的是,它们都在以下两种模式之一中失败!
或者
使用 gcc 或不同版本的 python(我们有 7 个!) 32 位或 64 位不会改变任何东西:您可以找到一个“好的”链接选项,但它在运行时崩溃。如何解决这个问题?
c++ - 指向 swig(或 Boost::Python)中的成员的指针
我从我的 C++ 应用程序为 python 做了一些绑定。
问题是我使用指向成员的指针(它用于计算最短路径并给出属性以最小化作为参数)。
这是 C++ 签名:
这就是我所做的(根据我在文档中的理解):
这就是我从 python 调用我的函数的方式:
这是我得到的错误:
我有一个使用默认第四个参数的重载方法,它工作得很好。
那么是否可以在 swig 中使用指向成员的指针?如果是,有什么诀窍?如果不是,那么最优雅的工作方式是什么?
感谢您的帮助!
更新:如果有人知道 Boost::python 是否确实做到了,我会切换到它。
lua - Swig 和 Lua:如何将 Lua 文件映射到 FILE*
我有一个作为参数的 C 函数,FILE*
我想在 Lua 中使用这个函数,传递 Lua 文件。我想我需要一个%typemap
。怎么写?(我刚开始学习Lua)。
python - 带有 Python 绑定的 C 库,两者都想渲染
我正在用 Python 画一些流体动力学。过了一会儿,我正在寻找更快的速度,所以我用 C 重写了实际的逻辑并建立了一些 Python 绑定(使用SWIG)。
我现在的问题是我没有如何以一种好的方式渲染它。逻辑是逐像素运行的,所以我想要跟踪和渲染像素。
如果我尝试在接受 a 的 C 库中创建一个函数,Python 会给我一个TypeErrorSDL_Surface*
,我可能有点天真地认为 PyGame 很容易将它直接映射到 SDL。如果我让 C 库“init”返回一个SDL_Surface*
.
有什么好方法可以做到这一点?如果我只渲染 C lib 中的所有内容,那将不是问题。但我想在那里放一些 GUI(使用 Python)。C 库已经跟踪哪些像素是“脏的”。我是否应该公开该列表并让 Python 循环遍历它,为每个脏像素调用一个函数?看起来很糟糕,因为这些巨大的循环正是我想用 C 重写部分应用程序的确切原因。
在任何人建议之前,boost.python现在安装起来有点重(因为我在 Windows 上),所以我暂时只使用 SWIG(除非有人有聪明的方法来安装“just” boost 。Python?)。
我希望这里有一颗灵丹妙药。如何制作 C 库、运行 SDL、与 Python 共享渲染目标、运行 PyGame?
c++ - 使用 SWIG 包装 Lua 对象以在 C++ 中使用
目前我知道如何使用 SWIG 绑定在 Lua 中实例化和传递 C++ 对象,我需要的是相反的。
我正在使用 Lua & C++ & SWIG。
我有 C++ 中的接口和 lua 中的对象,它们实现了执行相同工作并具有相同结构的方法。我希望能够在 lua 中实例化这些对象,然后使用指向它们类似的接口的指针在 C++ 中传递它们。
因此,我可以想象创建一个接口的 c++ 实现,它将充当所述 lua 对象的处理程序,但我不知道如何做到这一点。该类将充当 C++ 世界中的 lua 对象代表或代理。
为了澄清,我将从以下示例代码开始,该示例代码用于回答我提出的类似问题:
C++ 代码:
卢阿代码:
现在假设我在 C++ 中有一个名为 Bank 的类:
我在这里想要的是一种在lua中执行以下操作的机制:
如果我需要采取额外的步骤,例如实例化一个 C++ 类以充当代理并将其传递给带有所有 lua 函数等的 lua 表,我可以想象它看起来像这样:
C++ 代码:
卢阿代码:
这里的问题是我不知道如何实现 ProxyAccount 类,甚至不知道 settable 的函数签名会是什么样子......
python - 为什么 SWIG 在链接到 gtkglext 时会导致 Python 崩溃?
我使用 SWIG 链接到 gtkglext 的任何内容都会在退出时使 Python 崩溃。为什么会崩溃?
测试.i:
会议:
有任何想法吗?谢谢...
c++ - 从 C++ 调用 Lua 表中的函数
例如,我有一个Lua表/对象:
这个 Lua 表里面有一个叫做 的函数chew
,它接受一个参数
我也使用过SWIG,例如一个类CPerson
:
我可以从 Lua 获得这个对象的一个实例:
我需要能够做的是以下 Lua 代码:
哪里person:eat
会调用表chew
中的函数bannana
,传递一个参数。
既然是用 C++ 实现的,假设类已经有一个 Lua 状态指针CPerson
,需要做哪些改变来实现?Eat()
CPerson
Edit1:我不想知道如何将 C++ 类绑定到 Lua,我已经有 SWIG 为我做这件事,我想知道如何从 C++ 调用 Lua 表中的 Lua 函数。
Edit2:类CPerson
和bannana
表都是通用示例,可以假设CPerson
该类已经有一个 LuaState 指针/引用,并且该Eat
方法的函数签名可以由回答的人更改。