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



我正在用一些实用程序、工具等在 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.run 的静态 this()。

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

最新更新