视觉C++ 将SDL_ttf与 SDL 和 SDL2 一起使用时出现访问冲突
visual C++ Access violation when using SDL_ttf with SDL and SDL2
我正在将SDL2_ttf与SDL2一起使用(在Visual Studio 2015中)。当我尝试运行以下代码时,
#include "SDL.h"
#include "SDL_ttf.h"
int main(int argc, char* args[]) {
SDL_Init(SDL_INIT_EVERYTHING);
TTF_Init();
SDL_Window* window;
SDL_Renderer* renderer;
SDL_CreateWindowAndRenderer(1600, 900, SDL_WINDOW_OPENGL, &window, &renderer);
TTF_Font* font = TTF_OpenFont("comic.ttf", 12);
SDL_Color color = { 0, 0, 0, 255 };
SDL_Surface* textSurface = TTF_RenderText_Solid(font, "asdf", color);
SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, textSurface);
TTF_Quit();
SDL_Quit();
return 0;
}
我收到"SDL.dll丢失"运行时错误。我将 SDL.dll 与 SDL2.dll、libfreetype-6.dll、SDL_ttf.dll、zlib1.dll 和其他库放在我的 system32 文件夹中,这解决了运行时错误,但我立即遇到了另一个错误:"MCP2016.exe 中0x000000006C812E39 (SDL2.dll) 未处理的异常:0xC0000005:访问冲突读取位置0x000000010000006A。
当我决定在Visual Studio对话框中"中断"告诉我这一点时,它指向了这条线。
SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, textSurface);
我遇到了一个旧的论坛帖子,建议SDL_ttf和 SDL2 可能会导致这样的访问冲突,因为它们不完全兼容。我认为这与我遇到的问题有关,因为它首先抱怨 SDL.dll。有人建议使用 SDL2 头文件重新编译 DLL,但恐怕这超出了我的能力范围,特别是因为 Windows 和 C++ 相处得不是很好。
我已经为此工作了大约八个小时,我已经没有想法来尝试解决这个问题了。有人对此有任何想法吗?
SDL 和 SDL2 不兼容。你要么有一个,要么另一个。
如评论中所述,解决方法是改用SDL2_ttf。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- SDL 窗口不会弹出
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 如何将SDL与Win32菜单一起使用
- 我可以将SDL-1.2.15与SDL2-Image Extension一起使用
- SDL_TTF和SDL 2不在一起工作.给出未处理的异常
- 如何将SDL_MapRGB与SDL 2.0一起使用
- SDL 控制台输出在调试时有效,但在与 exe 一起运行时无效
- 视觉C++ 将SDL_ttf与 SDL 和 SDL2 一起使用时出现访问冲突