目前,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) mylib_libfun
),并在主要和辅助包装文件中反映出来。现在我需要在这些文件上运行一个繁琐的后处理器,这很脆弱。
答案 0 :(得分:0)
您的第二个建议的解决方案是最简单的解决方案。您可以使用SWIG's advanced renaming一次完成所有操作。
例如给定函数:
void read();
我们可以使用自动插入的mylib_
前缀来包装它:
%module test
%rename("mylib_%s") "";
void read();