这个问题大概是由于 MacOS 的问题引起的,奔溃的地方在 SDL2 的代码中,如果直接使用 brew
安装 SDL2就会遇到这个问题,所以需要修改 SDL2源码然后再编译安装。
我这里采用的是 origin/release-2.28.x
分支,修改部分如下:
src/video/cocoa/SDL_cocoamouse. m 文件中:
/*
把下面这个函数的函数体删除或者注释掉,让他直接返回NULL
*/
@implementation NSCursor (InvisibleCursor)
+ (NSCursor *)invisibleCursor
{
static NSCursor *invisibleCursor = NULL;
return invisibleCursor;
}
@end
根目录的 CMakeLists 中:
# set(SDLMAIN_SOURCES ${SDLMAIN_SOURCES} ${N3DS_MAIN_SOURCES}) 注释这一行
set(SDLMAIN_SOURCES ${SDLMAIN_SOURCES} ${N3DS_MAIN_SOURCES} # 添加下面的内容
src/video/cocoa/SDL_cocoamouse.h
src/video/cocoa/SDL_cocoamouse.m)
还有一个地方,我没有修改就可以跑了,但是最好修改一下,在 src/video/cocoa/SDL_cocoawindow. m 文件里 :
/*
把下面这个函数中的部分注释掉就可以了
*/
- (void)resetCursorRects
{
/* KJSL: temp workaround for crash on Intel MacOS Sequioa 15.1.1 (24B91)
// [super resetCursorRects];
// [self addCursorRect:[self bounds]
// cursor:Cocoa_GetDesiredCursor()];
*/
}
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
然后重新编译,我是吧 SDL2 和 ffmpeg 全部重新编译了一遍,但我估计只要重新编译 SDL2 就可以了。
评论