gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:23 25 4
gpt4 key购买 nike

目前 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com