C++ SFML程序因窗口标题中的非ASCII字符而崩溃
所以我只是安装了SFML,并试图做一个简单的程序,编译工作正常,但当我试图运行可执行文件时,它失败了。 首先,我需要做一个技巧来授权应用程序启动,因为苹果没有识别它。我按照这些说明安装SFML 在我运行应用程序时成功授权应用程序后,我收到以下错误消息:C++ SFML程序因窗口标题中的非ASCII字符而崩溃,c++,sfml,C++,Sfml,所以我只是安装了SFML,并试图做一个简单的程序,编译工作正常,但当我试图运行可执行文件时,它失败了。 首先,我需要做一个技巧来授权应用程序启动,因为苹果没有识别它。我按照这些说明安装SFML 在我运行应用程序时成功授权应用程序后,我收到以下错误消息: 2020-11-24 10:20:55.638 exemple-graphisme1[2768:29657] *** Assertion failure in -[SFWindow setTitle:], NSWindow.m:2490 2020
2020-11-24 10:20:55.638 exemple-graphisme1[2768:29657] *** Assertion failure in -[SFWindow setTitle:], NSWindow.m:2490
2020-11-24 10:20:55.640 exemple-graphisme1[2768:29657] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: aString != nil'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff204956af __exceptionPreprocess + 242
1 libobjc.A.dylib 0x00007fff201cd3c9 objc_exception_throw + 48
2 CoreFoundation 0x00007fff204be512 +[NSException raise:format:arguments:] + 88
3 Foundation 0x00007fff212776c9 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 191
4 AppKit 0x00007fff22c7da75 -[NSWindow setTitle:] + 142
5 libsfml-window.2.5.dylib 0x000000010e5bf4fd _ZN2sf4priv15WindowImplCocoaC2ENS_9VideoModeERKNS_6StringEmRKNS_15ContextSettingsE + 269
6 libsfml-window.2.5.dylib 0x000000010e5b0e03 _ZN2sf4priv10WindowImpl6createENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE + 67
7 libsfml-window.2.5.dylib 0x000000010e5b02e5 _ZN2sf6Window6createENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE + 469
8 libsfml-graphics.2.5.dylib 0x000000010e61e823 _ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE + 99
9 exemple-graphisme1 0x000000010e582849 main + 233
10 libdyld.dylib 0x00007fff2033e631 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
[1] 2768 abort ./exemple-graphisme1
我的代码非常简单,只在窗口上画一个点
#include <SFML/Graphics.hpp>
using namespace sf;
using Point = Vector2f;
void draw_point(RenderWindow& w, Point pos, Color color) {
Vertex p[] = { Vertex(pos, color) };
w.draw(p, 1, sf::Points);
}
int main()
{
// ed: The line below originally contained "Hello World"
RenderWindow window(VideoMode(640, 480), "Ma super fenêtre");
window.clear(Color::White);
draw_point(window, {120, 5}, Color::Red);
window.display();
sleep(seconds(10));
return 0;
}
谢谢你的阅读 所以问题很简单,我编辑了代码,将其翻译成英语,但开始时第一行是
RenderWindow window(VideoMode(640, 480), "Ma super fenêtre");
由于字符“ê”而发生错误
谢谢你的回答,很抱歉这个令人失望的回答 请在启用调试信息的情况下进行构建(在构建时添加
-g
标志),您可能可以在源代码中找到发生此情况的位置。如果没有,则使用调试器捕获断言并向上调用代码堆栈以查看其发生位置。当我使用lldb时,它会在我编写进程启动时崩溃,并且我编辑代码以仅放置第一行,它会崩溃并显示相同的错误消息!你能试着用clang++而不是g++编译吗?我看到libsfml是用clang编译的,它的std::string
与clang中的不同。@Botje除非明确安装,g++
是clang++
的别名。对于OP:请运行命令g++-v
,查看您真正使用的编译器。g++-v配置为:--prefix=/Library/Developer/CommandLineTools/usr--with gxx include dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1 Apple clang 12.0.0.0(clang-1200.0.32.27)目标:x86_64-apple-darwin20.1.0线程模型:posix InstalledDir:/Library/Developer/CommandLineTools/usr/Bin这就是问题中包含a非常重要的原因。如果要使用非ASCII字符,必须使用sf::String::fromUtf8(“Ma super fenêtre”)
RenderWindow window(VideoMode(640, 480), "Ma super fenêtre");