【发布时间】:2012-04-05 13:34:36
【问题描述】:
我正在将用 C 编写的第 3 方库 API 转换为 D。该库导出了许多名为 libname_foofunc、libname_barfunc 等的函数,这对于 C 库来说是可以防止膨胀的全局命名空间的。由于 D 比 C 更模块化,我想提供更多的 D'ish 接口并去掉函数前缀,所以函数看起来像 libname.c.foofunc 和 libname.c.barfunc。
由于图书馆不知道我的“改进”,我必须以某种方式将 libname.c.foofunc 翻译成 libname_foofunc 并同时保留正确的外部链接、目标名称修改和调用约定。
假设有办法(我也不知道)告诉链接器外部未解析符号 __imp__D1c7foofuncFZi 对应于 _libname_foofunc 或 libname_foofunc@0(尽管我必须手动进行名称修改),有告诉 D 调用约定是什么仍然是个问题。
如果我在libname/c.di 中明确指定extern(C) int foofunc(),则不再存在调用约定问题,但名称被转换为_foofunc,这也与预期不同。
那么,在 D 中是否有办法以不同于导出的名称导入外部函数?
我曾考虑过以原始名称“按原样”导入函数,然后将它们别名为无前缀的类似物,但这似乎很笨拙。
【问题讨论】:
标签: linker static-linking d