问题标签 [language-binding]

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 回答
214 浏览

python - C/Python绑定:指针地址修改

资源

C++

Python

安慰

create_service 返回指针地址:0x7fc3a0e330e0

初始化地址:-1595723552

删除地址:-1595723552

release_service消费指针地址:0xffffffffa0e330e0

分段错误:11

错误

异常类型:EXC_BAD_ACCESS (SIGSEGV)

异常代码:0xffffffff914d37a0 处的 KERN_INVALID_ADDRESS

构建(cmake)

设置(CMAKE_CXX_COMPILER clang++)

设置(CMAKE_CXX_FLAGS“-stdlib=libc++ -std=c++11 -Wall -Wextra -Weffc++ -pedantic”)

add_library( 助手共享 ${MANIFEST} )

target_link_libraries(助手休息床)

描述

当将 C++ 类实例作为指针返回时。Python 收到正确的地址。但是,在以后使用此地址时,它似乎已被修改。

0 投票
1 回答
90 浏览

python - 是否可以解开 PyGTK 对象?

Gtk.Window在 Python 中有一个对象。这个对象本质上只不过是一个GtkWindow *. 是否有可能从 C (带有 a PyObject *)或 Python 实现GtkWindow *

我有一个用 Python 编写的应用程序,但某些特定小部件的渲染代码太慢了。我试图将它隔离在一个备用线程中,但我认为我被 GIL 咬了,因为我试图让两个线程做 CPU 工作。(后台线程,几乎 100% 的 CPU,在需要时与 UI 线程争夺太多时间,导致它没有响应。)如果我用 C 编写后台工作线程就足够简单了有指针。

0 投票
1 回答
3411 浏览

python - 带有 python/dyn 和 python3/dyn 的 Vim 默认使用 python 2

你已经知道我有 vim 问题。我通常使用启用了 pymode 的 python 3。今天我想在我的 vim 中添加一个不错的 python 自动完成功能,但事情变得一团糟。我想用病原体安装[YouCompleteMe][1],我看到需要安装vim并支持python2。但是pymode需要python3支持(或者至少我需要python3支持)经过大量谷歌搜索后,我预编译并安装了带有 --enable-shared 配置的两个 python 版本和带有两个支持的 vim(python/dyn 和 python3/dyn)

问题是 vim 在需要时不会加载 python3。

我正在使用 python 3 开发一个项目,并尝试将其添加到文件末尾:

输出是:

如果我将其键入为 vim 的命令:

输出是:

我还没有尝试安装YouCompleteMe ...

我的问题是:如何告诉 vim 默认使用 python3 而不是 python2 ?(无需重新编译,仅支持 python3)

0 投票
1 回答
1632 浏览

linux - 通过插件管理器对 monodevelop 的 Fsharp 绑定无法解决依赖关系

我需要在 Arch Linux 上使用 monodeveloper 运行 F#。(请不要建议我不要使用它,我必须使用它,因为它是大学课程的要求)。我尝试为 F# 添加语言绑定,如此链接中所述(下载的 zip 文件,解压缩并尝试从加载项管理器添加):

https://code.google.com/p/wildart/wiki/FSharpBinding

它给了我以下错误:

由于存在依赖性冲突,无法安装选定的加载项。

在任何存储库中都找不到包“组件 v2.2”

在任何存储库中都找不到包“Core v2.2”

在任何存储库中都找不到包“Core.Gui v2.2”

在任何存储库中都找不到包“Ide v2.2”

在任何存储库中都找不到包“Projects v2.2”

在任何存储库中都找不到包“Projects.Gui v2.2”

我怎么解决这个问题?我在互联网上搜索并找不到解决方案。


第二种方式,我尝试按照 github 中的描述从头开始构建和安装:

https://github.com/fsharp/fsharpbinding/tree/master/monodevelop

我已经下载了 fsharpbinding.zip,安装了 nuget(我不知道我还应该下载什么,因为它说“必需的 nuget 包”),解压缩文件,然后在他的文件夹下调用 ./configure.sh。它失败了,因为它在给定的路径中找不到 fsc:

其中:没有 fsc 在 (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

它成功地找到了它要查找的所有其他目录。F# 已经安装,但我不知道如何找到 fsc 以将其路径传递给 configure.sh。我该怎么办?

0 投票
0 回答
98 浏览

perl - 将 local::lib 与 3-rd 方共享 .so 库一起使用

我有一个 Perl 库,它由一个二进制形式的 C 库(.so文件)和该库的 Perl 绑定源(Makefile.PL等)组成。

我所需要的只是运行库附带的 Perl 示例的能力。我想避免全局安装任何东西或更改系统范围的配置。

所以我创建了一个特殊用户,我希望一切都在主目录中运行。更改环境并在 homedir 中添加文件/文件夹当然没问题。

我已经在local::lib系统范围内安装了各种 CPAN 助手 ( cpancpanp因此cpanm如果它们有任何帮助我可以使用它们。

我可以创建~/lib并放在.so那里,或者把它放在里面的某个地方~/perl5

问题是如何在编译期间和运行时使共享 C 库可用于 Perl 绑定。似乎我需要LD_LIBRARY_PATHLDFLAGS环境变量,但我不确定如何将它们与local::lib.

此外,该库被命名为foo.1.2.3.4.sobut linker want -lfoo。我应该自己创建foo.so -> foo.1.2.3.4.so符号链接吗?

更新:

生成的相关部分Makefile

修补 LDDLFLAGS 以包含一个额外的-L开关可以工作,但感觉很脏。

0 投票
1 回答
477 浏览

c++ - Creating FFI between C and my language

Let's say that I have implemented a programming language, (we'll call it A for now). A is pretty similiar to C.

I want my users to be able to access functions and data structures from already-existing C libraries. Is this possible? If it is, how would a naive implementation look ?

A

  • is implemented in C++
  • compiles to machine code
  • needs to access closed-source C libraries
0 投票
1 回答
193 浏览

c++ - 在为 C 消费包装 C++ 类 API 时如何将异常转换为错误和错误消息?

问题

假设你有一个 C++ 类。

假设您要将其构造函数和方法导出到 C。

假设您遵循了“为 C 消费包装 C++ 类 API”问题的解决方案给出的建议。

现在假设您的类构造函数可以抛出一个或多个异常,您希望在返回 C 世界之前在 C++ 端捕获这些异常,同时仍然让 C 用户有机会获取有关刚刚发生的错误的信息。

第一种方法

我可以检查是否MyClass_new()返回了一个 NULL 指针,然后使用函数检索库中发生的“最后一条错误消息”,但是当构造函数失败时,没有对象可以为错误检索提供正确的上下文,因此应该是一个全局变量用于保存最后一个错误,但这会破坏库的可重入性。

第二种方法

我能想到的另一种可能性,实际上是我想出的解决方案,是让类在构造函数本身内部捕获异常,将其转换为错误消息并将对象置于排序的“错误状态”。

每次之后

将执行以下检查

并且将使用下一条语句检索错误消息

第三种方法

我能想到的另一种可能性是将指向给定大小的缓冲区的指针传递给每个可能失败的函数,该函数将被错误消息填满,但看起来很乱。

你会怎么做?是否有处理此类问题的事实上的标准方法?

0 投票
1 回答
598 浏览

c# - Objective-C 将指针数组绑定到 C#

我正在尝试在 Xamarin 中的 Objective-C 库和 C# 之间进行绑定。我试图绑定的类头是这样的:

我想不通的是该函数的第一个参数是什么。我试过这样绑定:

上面的代码总是从 MGLPolyLine.PolyLineWithCoordinates(pointer, 2) 调用返回 null,这让我相信我没有正确传递数组。执行此绑定的正确方法是什么?

谢谢

编辑

我使用了 Objective-Sharpie 来查看它会为我创建什么绑定,这就是我得到的:

现在的问题是我收到错误“btouch: Unknown kind CoreLocationCoordinate2D* coords in method 'MGLPolygon.PolygonWithCoordinates' (B1002)

0 投票
1 回答
378 浏览

python - 从 python 调用 C 或 C++ 是如何工作的?

关于“如何”从 Python 调用 C C++ 代码存在多个问题。但我想了解完成此操作后究竟会发生什么以及性能问题是什么。下面的理论是什么?我希望通过理解原理得到回答的一些问题是:

当考虑正在处理的数据(尤其是大数据)(例如 2GB)时,需要从 python 传递到 C/C++ 然后再返回。调用函数时如何将数据从 python 传输到 C?函数结束后结果如何传回?一切都是在内存中完成的,还是用于传输数据的 UNIX/TCP 套接字或文件?是否完成了一些翻译和复制(例如转换数据类型),我是否需要 2GB 内存来保存 python 中的数据和额外的 +-2GB 内存才能将 C 版本的数据传递给 C 函数?C 代码和 Python 代码是否在不同的进程中运行?

0 投票
2 回答
157 浏览

c++ - Qt/Gtk+ 是否允许同时使用两种语言进行编程?

像 qt/gtk+ 这样的小部件工具包有多种语言绑定。假设我想用 c++ 开发一个应用程序,但想为我的 gui 使用 gtk+ C 语言绑定。是否可以用一种语言编写应用程序的源代码并为 gui 使用不同的语言绑定?ide也会干扰吗?