使用静态构造函数链接dll时如何解析未解析的外部符号?

问题描述 投票:2回答:1

我正在使用一些工具,工具等在D中构建一个dll。我可以成功编译一个基本的DLL和测试程序,在Visual D中使用它没有任何问题。我熟悉创建和使用dll的过程。特别是与他们静态联系。但是如果dll中的模块具有静态this(),或者使用静态this()导入模块,则dll将编译,但是您构建的任何使用它的程序都将失败,并且foo.bar .__ ModuleInfo未解析。

错误LNK2001:未解析的外部符号“dtoolbox.dtoolboxdllmain .__ ModuleInfo”(_ _ D8dtoolbox15dtoolboxdllmain12__ModuleInfoZ)

在这种情况下,我的dllmain模块dtoolbox.dtoolboxdllmain导入core.runtime,它有一个静态this()所以我得到这个错误。我该如何解决这个问题?什么是静态模块构造函数来做到这一点?只要没有静态构造函数,一切都运行正常。

[编辑]导入core.runtime不是问题,它是模块自己的静态this(),而不是core.runtime的静态this()。

dll linker d unresolved-external
1个回答
2
投票

解决方案是避免将带有dll静态this()&& static~this()的模块导入到使用dll的程序模块中。 (在这种情况下dllmain模块被导入,完全没有理由,我的错误)不是说dll不能拥有它们,它们只需要在编译dll时存在于某个文件中。我发现在与dllmain相同的模块中编写它们很方便,因为这个文件永远不需要由程序使用dll引用/导入。

© www.soinside.com 2019 - 2024. All rights reserved.