链接器错误;无法链接:_D16TypeInfo_HAyayAa6__initZ

时间:2013-11-23 21:31:56

标签: linker d

链接我的代码时,出现以下错误:

  

../ Build / main.o :(。data._D16TypeInfo_yHAyaAa6__initZ + 0x10):未定义引用`_D16TypeInfo_HAyayAa6__initZ'

我不知道错误发生在哪里,因此我可以为您提供的代码不多。 很多代码。

1 个答案:

答案 0 :(得分:2)

尝试使用main():

将此代码添加到您的文件中
void aaHack() {
    import std.stdio;
    writeln(typeid(immutable(char[])[string]));
}

并重新编译,看它是否有效。我确定你的错误是由关联数组中的一个老错误造成的,这个错误非常难以重现;它似乎随机出现,也难以修复。所需的确切类型是我不确定的东西,我猜这是基于眼球demangle,但我认为这是它。

无论如何,D中的关联数组实现现在停留在两个想法之间的中间点:通过特殊的运行时调用在语言中实现,并在库中实现,除了语法糖之外没有编译器支持。再一次,我不是肯定这是原因,但它围绕这些变化而来,所以我认为就是这样。我相信正在发生的是你引用AA类型,然后通过半完成库类型使用它,但是函数需要typeinfo用于编译器的魔术调用,并且它永远不会被正确插入。或者其他什么。

但黑客的解决方法是在某处手动强制提及typeid来弥补差距。我的cgi.d有一个14行的块一遍又一遍地处理这个东西:完全不可变的键和/或值似乎是打破它的边缘情况,而尾部不可变的数组(例如字符串)工作正常。也许编译器假设其他东西将被剥离而不是,idk,但是黑客对我来说工作得相当好。