无法在DLL中链接SDL2-static.lib

时间:2018-09-17 05:18:15

标签: c++ linker sdl sdl-2

我需要在DLL中静态链接SDL2,但出现此错误: 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时,它却没有。我发现以下问题: unresolved external symbol __imp__fprintf and __imp____iob_func, SDL2 它看起来像一个副本,但不仅我用相同的编译器(VS2017)构建所有内容,而且如果我不静态链接它,也没有问题。

我在那里尝试了解决方案(重建为N / A,添加定义,并包括legacy_stdio_definitions.lib)无济于事。 我只能假设问题出在我静态链接的代码中(因为静态构建包含所有内容)。

如果有人想复制,这很简单,您只需要构建SDL-static并将库包含在DLL项目中即可。如果您包含SDL2.lib(动态),则可以使用;如果您在.exe项目中包含SDL2-static.lib,则也可以使用。

PS:我正在使用相同的SDK和工具集来编译SDL和静态链接它的DLL。我已经为尝试的每种解决方案重建了所有内容。

1 个答案:

答案 0 :(得分:0)

为了在VS2017中编译静态链接SDL的DLL,您必须链接一些有点奇怪的定义。

当然,除了SDL2使用的imm32winmmversion库之外,如果要构建DLL,还必须包括msvcrt和{ {1}}和vcruntime