如何在VisualStudio2008Express中编译和链接最小的SDL程序? 我试图在Visual Studio 2008 Express中使用C++中的SDL。以下程序编译但不链接: #include <SDL.h> int main(int argc, char *argv[]) { return 0; }
无论我如何或是否与SDL.lib和SDLmain.lib链接,我都会得到它。将如何在VisualStudio2008Express中编译和链接最小的SDL程序? 我试图在Visual Studio 2008 Express中使用C++中的SDL。以下程序编译但不链接: #include <SDL.h> int main(int argc, char *argv[]) { return 0; },c++,visual-studio,sdl,C++,Visual Studio,Sdl,无论我如何或是否与SDL.lib和SDLmain.lib链接,我都会得到它。将main定义为main()或SDL_main()会产生相同的错误,无论是否使用extern“C” 编辑:我通过在main.cpp中不包含SDL.h解决了这个问题,这是一个独立于问题的重构。一个类似的解决方案是在定义函数之前定义主函数。链接器找不到入口点。这意味着main()函数不能被识别为入口点 如果有.def文件,请将其删除 另外,如果您将项目设置为使用unicode而不是mbcs进行编译,则必须使用wmain()而
main
定义为main()
或SDL_main()
会产生相同的错误,无论是否使用extern“C”
编辑:我通过在main.cpp中不包含SDL.h解决了这个问题,这是一个独立于问题的重构。一个类似的解决方案是在定义函数之前定义主函数。链接器找不到入口点。这意味着main()函数不能被识别为入口点 如果有.def文件,请将其删除
另外,如果您将项目设置为使用unicode而不是mbcs进行编译,则必须使用wmain()而不是main()。我目前没有可用的VC++,但我已经多次看到这个问题 您需要创建Win32项目,而不是控制台项目。Win32项目需要一个函数作为程序入口点。SDLmain.lib包含这个入口点,SDL_main.h头文件有一个宏,可以将主函数重新映射到SDL_main。此函数由SDLmain库中的入口点调用 主功能必须具有以下签名:
int main(int argc, char *argv[])
它还需要在声明主函数之前包含SDL.h,并且需要链接到SDL.lib和SDLmain.lib
看起来你正在这样做因此,我猜您有一个控制台项目设置。因此,链接器正在寻找一个要调用的主函数,但它正在被宏SDL\U main.h重新映射到SDL\U main。所以,链接器找不到入口点就放弃了 在main()之前添加以下行对我很有帮助: 还建议添加以下行:
#ifdef _WIN32
#pragma comment(lib, "SDL.lib")
#pragma comment(lib, "SDLmain.lib")
#endif
虽然我在尝试第二种解决方案时仍有链接错误。是的,将从更改为windows应用程序(通过项目属性/配置属性/链接器/系统/子系统)是可行的。谢谢(不过,我最终找到了一个不同的解决方案)
#ifdef _WIN32
#undef main
#endif
#ifdef _WIN32
#pragma comment(lib, "SDL.lib")
#pragma comment(lib, "SDLmain.lib")
#endif