我知道有很多CUDA语言绑定,比如PyCUDA,但是.Net 有什么好的绑定吗?我见过的唯一一个是这个,但我想知道是否还有其他人.
我是一名Python资深人士,但在C中没有涉足太多.在互联网上找不到任何适用于我的东西半天之后,我想我会问这里并得到我需要的帮助.
我想要做的是编写一个简单的C函数,它接受一个字符串并返回一个不同的字符串.我打算用几种语言(Java,Obj-C,Python等)绑定这个函数,所以我认为它必须是纯C?
这是我到目前为止所拥有的.注意我在尝试在Python中检索值时遇到了段错误.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
const char* hello(char* name) {
static char greeting[100] = "Hello, ";
strcat(greeting, name);
strcat(greeting, "!\n");
printf("%s\n", greeting);
return greeting;
}
Run Code Online (Sandbox Code Playgroud)
import ctypes
hello = ctypes.cdll.LoadLibrary('./hello.so')
name = "Frank"
c_name = ctypes.c_char_p(name)
foo = hello.hello(c_name)
print c_name.value # this comes back fine
print ctypes.c_char_p(foo).value # segfault
Run Code Online (Sandbox Code Playgroud)
我已经读过,segfault是由C释放最初为返回的字符串分配的内存引起的.也许我只是在咆哮错误的树?
什么是实现我想要的正确方法?
是否存在编写纯C的符号计算库?符号计算在象征形式下操纵数学方程.
我知道有Mathematica和Sympy.但是,我有兴趣在一个符号计算库的高性能纯C实现中创建绑定到脚本语言,特别是Ruby启动.
似乎他们需要这样一个象征性的数学图书馆.随着时间的推移,理想情况下,库可以构建在类似于libgit2的庄园中,其中有一个项目的中央C实现,并且为了创建与其他语言的绑定而分支各种实现?
我正在使用SWIG来包装一个std::map在PHP 中返回的函数.
在PHP代码中,我需要遍历地图的元素.
Thw SWIG库提供std::map了对std_map.i接口文件的支持,但只包含以下方法:
clear()
del($key)
get($key)
has_key($key)
is_empty()
set($key, $x)
size()
Run Code Online (Sandbox Code Playgroud)
如何迭代地图元素?我需要的扩展std_map.i文件带有某种包装对迭代器和begin()和end()?
我正在使用SWIG为C++库编写PHP包装器,但是我在使用具有模板类型实例的结构作为数据成员时遇到了问题.
假设我有以下头文件:
template <typename>
struct myvector
{
};
struct S
{
myvector<int> v;
};
myvector<int> foo();
S bar();
Run Code Online (Sandbox Code Playgroud)
和接口文件:
%module test
%{
#include "test.hpp"
%}
%include "test.hpp"
%template(IntVec) myvector<int>;
Run Code Online (Sandbox Code Playgroud)
当我尝试使用直接返回的函数时myvector,它工作正常:
$v1 = test::foo();
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用返回S对象的函数,并尝试访问其类型为的数据成员时myvector:
$s = test::bar();
$v2 = $s->v;
Run Code Online (Sandbox Code Playgroud)
我在运行时收到以下错误:
PHP Fatal error: Class 'myvectorT_int_t' not found in test.php on line 145
Run Code Online (Sandbox Code Playgroud)
我可能错过了我的界面文件,但我不知道是什么.有人可以帮忙吗?
我有一个C库,它使用函数指针的结构来进行回调.回调将从C代码调用.
extern "C" {
typedef struct callbacks_t {
void (*foo) (const char*);
int (*bar) (int);
} callbacks_t;
}// extern C
Run Code Online (Sandbox Code Playgroud)
我可以安全地将哪些C++函数放在要从C库调用的函数指针中?静态成员函数?完全指定模板功能?不捕捉Lambdas?
g ++似乎让我使用了上述所有内容,但是当我对C和C++函数使用不同的调用约定和语言绑定时,我质疑安全性.
c++ language-binding function-pointers calling-convention extern-c
当有人从C库绑定到Java(或任何其他垃圾收集语言而没有保证运行的析构函数)时,它们如何处理非垃圾收集内存的正确释放?
编辑:我正在考虑的事情(我知道这在我的原始问题中没有明确说明)是当一块非gc'ed内存保存对其他非gc'ed资源的引用时需要释放的对象被释放.例如,如果你有一个非gc'ed链表节点,这是一个很长的这类节点列表的头部,你想让gc系统最终自动清理它,你如何设置它?
我正在尝试编写一个可以从多种编程语言使用的库,例如:
我知道实现此目的的基本方法是用 C/C++ 编写它并为每种语言维护我自己的绑定,或者为每种语言维护库的单独副本(就像反应式扩展所做的那样)。不管怎样,对于n 种语言来说,这都是O(n)的工作。
是否有一种语言或工具可以用来以一种语言编写库并自动生成其他语言的绑定?
我理解PyObjC的概念,但无法找到有关它究竟是什么或如何开始使用它的任何信息.
它是否像转换器一样,您输入python文件并获得目标c?或者它是一个库,您可以导入到您的目标c文件,让你在其中编写python?
或者它完全是另一回事?
如果有人可以提供如何处理它的提示,概述它是如何工作的,或者只是一些有关它的hello世界的指示,我将非常感激.