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

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

我需要在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。我为我尝试的每个解决方案重建了一切。

c++ linker sdl sdl-2
1个回答
0
投票

为了在VS2017中编译一个静态链接SDL的DLL,你必须链接一些有点划分的定义。

当然除了SDL2使用的imm32winmmversion库,如果你正在构建DLL,你还必须包括msvcrtvcruntimeucrt

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