1

目前 Swig D 绑定使用以下符号libfun

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

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

有没有办法:

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

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

4

1 回答 1

0

您建议的第二个解决方案是最简单的解决方案。您可以使用SWIG 的高级重命名一次性完成所有操作。

例如给定函数:

void read();

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

%module test

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

void read();
于 2012-09-16T14:38:37.417 回答