一个库可以包含多个绑定吗?
can a library contain multiple bindings
如果我用c++写了一个库,并且为C, Ada, Fortran, D
&其他编译语言。
所有这些绑定可以在同一个二进制与c++编译代码,即使他们使用相同的函数名称?
,你能像这样使用绑定吗?
根据您创建绑定的方式,可能甚至不需要库:
- Bindings编写了一些解释器特定的api:
void init_Modulename()
这个函数然后使用MRI api,如rb_define_module, rb_define_class, rb_define_method等来包装C/c++ api。确保这个函数被extern "C"包围,这样它的名字就不会像c++那样混乱。
通常这个共享库与你要绑定的库相链接,但没有什么可以阻止它们是相同的共享库。
- 运行时完成的绑定
例如在Ruby和其他解释器上使用FFI的绑定。绑定用相同的语言定义,并且FFI库知道如何在运行时调用目标库中的方法。因此,在这种情况下,绑定本身没有"库"。
- 使用生成器完成的绑定
如果您使用生成器,如SWIG,它将扫描库头文件并生成各种语言的绑定。根据SWIG生成器如何实现这些目标(例如,Ruby使用上面描述的MRI API), SWIG将创建可以编译到自己库中的代码,但只要没有符号冲突,您也可以将其与库一起编译。
当我说符号冲突时,我不是指API本身,而是指绑定助手,如init_Modulename()。
你可以链接c++和C,只要你只调用C风格的函数(在对象之外),并通过"extern C"在头文件中关闭名称混淆。特别是如果您使用相同的编译器。不同的编译器如果使用不同的对象格式将会导致问题。我不知道ADA/Fortran/D,但我怀疑答案是否定的,至少直接通过。lib或。obj文件。在windows上,如果ADA/FORTRAN/D支持动态链接,您可以尝试通过DLL(或者您可以调用windows api LoadLibrary)。
这不是一件容易的事情,我掩盖了细节。如果你真的要尝试,那么你需要具体说明你正在使用的平台和编译器,我会尽量更具体。
是。一个例子是《PlPlot》;它是用C编写的,并绑定到Ada, c++, D, Fortran77, Fortran95, Java, Lua, OCaml, Python,…
- 在 openGL 中多次绑定缓冲区
- sqlite3绑定多个语句值
- 结构化绑定语法是否可以在多态 lambda 中使用
- 为什么包含会<utility>破坏 GCC 中的结构化绑定?
- C 使用多个lambdas/绑定以引用相同的功能
- 将多个纹理 OpenGL 绑定到不同的四边形
- 如何在Java中包含一个库,该库在C 中具有Java中具有本机绑定(库)的库
- 多态变体,并将一种类型的引用绑定到另一种类型的引用
- 前向迭代器与多个绑定相结合的迭代速度太快
- 使用Boost ::与包含Boost :: Mutex的类绑定
- 如何在gSOAP中绑定多态类型
- 如何在多个接口上绑定到同一 UDP 端口
- (DirectX 11)单个顶点缓冲区是否可以一次绑定到多个 IA 输入槽
- boost::asio::deadline_timer绑定到多态套接字类指针
- 如何在rails项目中包含c++绑定
- vtable(动态绑定)的C++思想中的多态性
- C++多变量模板未绑定到函数参数
- 如何将C++函数绑定到lua,该函数使用luabind返回多个值
- 在C++中绑定了多个引用的临时的生存期
- 一个库可以包含多个绑定吗?