使用vcpkg在Windows上安装的SDL2库,与VS的自动链接问题

6
据我所知,这不是现有问题的重复。此问题特别涉及于Visual Studio自动链接SDL2库。
我已使用vcpkg安装了SDL2(x64-windows变体)。
vcpkg install sdl2 --triplet x64-windows

我已经将vpkg库提供给Visual Studio:

vcpkg integrate install

我使用VS 2019配置了我的项目,使用Console子系统,我的主程序如下:

#define SDL_MAIN_HANDLED
#include <SDL2/SDL.h>

int main(int, char*[])
{
}

为什么我需要指定SDL_MAIN_HANDLED?似乎自动链接SDLmain2.lib无法正常工作?如果不指定SDL_MAIN_HANDLED,则链接会失败。
unresolved external symbol main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)

我也尝试在main()声明中添加extern "C",但没有成功。

我已经写了很多使用SDL2的应用程序,但这是我第一次使用vcpkg来定位它。


这个回答解决了你的问题吗?[我在没有定义SDL_main的情况下使用SDL函数。这样可以吗?] (https://dev59.com/NZHea4cB1Zd3GeqPs7ek) - 273K
嗨@S.M.,我知道这篇文章,但它并没有回答我的问题。 - François Beaune
它回答了这个问题:“为什么我需要指定SDL_MAIN_HANDLED?”是吗? - 273K
它确实有作用,但是在不同的上下文中。我非常清楚 SDL_MAIN_HANDLED 的作用和用途;我无法弄清楚的是为什么我需要在特定的上下文中使用它,以及是否有更好的方法来处理事情。 - François Beaune
2个回答

7

使用vcpkg和VS链接SDL2手册库

我的回答是@HolyBlackCat的后续,非常感谢他的帮助。

在你的情况下,目录是x64-windows,默认是x86-windows

右键单击项目 -> 属性 -> 配置属性


第一步

前往:VC++目录 -> 库目录

对于Debug配置,请添加:

$(VCPKG_ROOT)\installed\x64-windows\debug\lib\manual-link

对于发布配置,添加:

$(VCPKG_ROOT)\installed\x64-windows\lib\manual-link

第二步

进入:连接器 -> 输入 -> 附加依赖项

对于 Debug 配置,请添加:

SDL2maind.lib

对于Release配置,添加:

SDL2main.lib

现在你不应该再被“main() 重新定义”错误所困扰。

4

这似乎是创建该程序包的人故意做出的决定。

如果您查看程序包描述文件,您会发现SDL2main.lib被移动到manual-link目录中。我不熟悉vcpkg,所以不确定如何“手动链接”它,但我认为这是可能的。


谢谢,这非常有帮助!我得想办法手动链接那个库。 - François Beaune
这个链接很有帮助:https://github.com/microsoft/vcpkg/issues/12474 - François Beaune

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接