Не удается связать SDL2-static.lib в DLL - PullRequest
0 голосов
/ 17 сентября 2018

Мне нужно статически связать SDL2 в DLL, но у меня появляется эта ошибка: LNK2019: unresolved external symbol __imp___acrt_iob_func referenced in function "void __cdecl `dynamic initializer for '__iob_func''(void)" (??__E__iob_func@@YAXXZ)

Странная часть в том, что когда я собираю .exe, все работает нормально, но когдаЯ изменяю тип конфигурации на .dll это не так.Я нашел следующий вопрос: неразрешенный внешний символ __imp__fprintf и __imp____iob_func, SDL2 , который выглядит как дубликат, но я не только создаю все с помощью того же компилятора (VS2017), но у меня также не возникает проблем, еслиЯ не связываю это статически.

Я пробовал там решения (перестройка - N / A, добавление определений, включая legacy_stdio_definitions.lib), но безрезультатно.Я могу только предположить, что проблема заключается в коде, который я связываю статически (поскольку статическая сборка содержит все).

Если кто-то хочет воспроизвести, это просто, вам просто нужно собрать SDL-static и включитьбиблиотека в проекте DLL.Если вы включаете SDL2.lib (динамический), он работает, если вы включаете SDL2-static.lib в проект .exe, он тоже работает.

PS: я использую тот же SDK и набор инструментов для компиляции обоихSDL и DLL, которая связывает его статически.Я восстановил все для каждого решения, которое я пробовал.

1 Ответ

0 голосов
/ 17 сентября 2018

Чтобы скомпилировать DLL в VS2017, которая статически связывает SDL, необходимо связать некоторые определения, которые немного разбросаны.

Помимо, конечно, библиотек imm32, winmm и version, которые использует SDL2, если вы создаете DLL, вам также необходимо включить msvcrt, а также vcruntime и ucrt.

...