c - 使用 extern(C) 的 swig D 绑定(bind)与现有的 extern(C) 函数冲突

标签 c d swig extern

目前 Swig D 绑定(bind)使用以下符号 libfun:

mixin(bindCode("libfun", "D_libfun"));
extern(C) int function(void* jarg1) libfun;

其中 D_libfun 符号在编译为库的 cxx 包装器中定义。因此,符号 libfun 被导出为 extern(C) 并且具有全局范围。我遇到过符号与现有 extern(C) 符号(例如 read)冲突的情况,导致模糊的运行时崩溃,我追溯到这个 swig 文件。

有没有办法:

  • 避免引入 extern(C) 中间声明
  • 或者,为这些符号添加用户指定的前缀或后缀(例如:extern(C) mylib_libfun),并将其反射(reflect)在主要和辅助包装器 d 文件中。

现在我需要对这些文件运行繁琐的后处理器,这很脆弱。

最佳答案

您建议的第二个解决方案是最简单的解决方案。您可以使用 SWIG's advanced renaming 执行此操作一次性完成。

例如给定函数:

void read();

我们可以用自动插入的 mylib_ 前缀包装它:

%module test

%rename("mylib_%s") "";

void read();

关于c - 使用 extern(C) 的 swig D 绑定(bind)与现有的 extern(C) 函数冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12443610/

相关文章:

c++ - 返回各种类型的函数的 SWIG 类型映射

c - MSP430 微 Controller - 如何检查寻址模式

c - 我不明白 inet/netinet/in.h 的宏

d - D接口(interface)文件中可以和不可以进入什么?

immutability - d2 : immutability of partially known structures

d - D 中的 'in' 和 'out' 关键字是什么意思?

python - 将 C++ 类序列化为文件,然后在 Python 中进行基于事件的反序列​​化?

java - 如何将 java 函数指针传递给 C++ native 代码

c - GCC既不是下沉分配也不是消除部分死代码

c - 当您不知道字符串有多长时,从 C 中的用户输入中拆分字符串