Как разрешить неразрешенный внешний символ при связывании DLL с статическими конструкторами? - PullRequest
2 голосов
/ 25 марта 2019

Я строю dll в D с некоторыми утилитами, инструментами и т. Д.Я могу успешно скомпилировать базовую dll и тестовую программу, чтобы использовать ее в Visual D без каких-либо проблем.Я знаком с процессом создания и использования DLL.Особенно статичны ссылки на них.Но если модуль в dll имеет статический this (), или импортирует модуль со статическим this (), dll скомпилирует, но любая программа, которую вы создаете, которая использует ее, потерпит неудачу с foo.bar .__ ModuleInfo, которая не разрешена.

ошибка LNK2001: неразрешенный внешний символ "dtoolbox.dtoolboxdllmain .__ ModuleInfo" (__D8dtoolbox15dtoolboxdllmain12__ModuleInfoZ)

В этом случае мой dllmain-модуль dtoolbox.dtoolboxdllmain импортирует статический файл, который в этом случае имеет статический файл (в этом случае), который в этом случае имеет статический файл (который в этом случае) импортирует статический файл, который в этом случае имеет статический файл (в этом случае), который в этом случае имеет статический файл (который в настоящее время имеет ядро), который в этом случае имеет статическое ядро ​​(которое в этом случае имеет статический файл), который в этом случае имеет ядро.получите эту ошибку.Как мне решить это?Что делают статические конструкторы модулей, чтобы вызвать это?Пока нет статических конструкторов, все работает нормально.

[edit] Импорт core.runtime не был проблемой, это были собственные статические модули this (), а не core.runtime статические this ().

1 Ответ

2 голосов
/ 26 марта 2019

Решение состоит в том, чтобы воздержаться от импорта модуля со статической библиотекой DLL this () && static ~ this () в модуль программы, использующей библиотеку dll.(В этом случае модуль dllmain был импортирован, безо всякой причины, моя ошибка) Не сказать, что dll не может иметь их, хотя, они просто должны быть в каком-то файле при компиляции dll.Мне было удобно записывать их в том же модуле, что и ваша dllmain, так как на этот файл никогда не нужно будет ссылаться / импортировать программа, использующая dll.

...