是否可以用 C++ 为 X11 Xlib 编程而不是使用 C?
Posted
技术标签:
【中文标题】是否可以用 C++ 为 X11 Xlib 编程而不是使用 C?【英文标题】:Is it possible to program in C++ for X11 Xlib instead of using C? 【发布时间】:2022-01-05 17:12:35 【问题描述】:我正在尝试在 X11、XLib 应用程序的 C++ 类中进行编程,但在执行以下行时不断收到“程序收到信号 SIGSEGV 分段错误”。 进一步执行 stop n 程序崩溃!
void
sysInfo::Create_Window (Display *dpy, int border_width)
scrn = DefaultScreen (dpy); // **ERROR hit on this line**
win_width = DisplayWidth (dpy, scrn);
win_height = DisplayHeight (dpy, scrn);
wmDeleteMsg = XInternAtom (dpy, "WM_DELETE_WINDOW", False);
/* Set up for window Manager Icon */
win_icon = XInternAtom (dpy, "_NET_WM_ICON", False);
cardinal = XInternAtom (dpy, "CARDINAL", False);
/* create operque window */
win = XCreateSimpleWindow (dpy,
RootWindow (dpy, scrn),
0, 0,
win_width,
win_height,
border_width,
BlackPixel (dpy, scrn),
WhitePixel (dpy, scrn) );
//wmHints (); // Window Manager Hints
//sizeHints (); // Window default size could be override
//classHints (); // Window class
// set up exit proc for sudden exit
XSetWMProtocols (dpy, win, &wmDeleteMsg, 1);
【问题讨论】:
是的,当然可以。请创建minimal reproducible example 以帮助人们诊断您的错误。 可以演示吗? 【参考方案1】:是否可以用 C++ 为 X11 Xlib 编程而不是使用 C?
是的。
不断收到“程序收到信号SIGSEGV分段错误”
在您的示例中不清楚dpy
的来源,但您确定您已正确打开显示连接吗?如果是这样,这个例子应该可以正常工作:
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <iostream>
#include <chrono>
#include <thread>
Window win;
void Create_Window(Display* dpy, int border_width)
int scrn = DefaultScreen(dpy);
int win_width = DisplayWidth(dpy, scrn);
int win_height = DisplayHeight(dpy, scrn);
Atom wmDeleteMsg = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
/* Set up for window Manager Icon */
Atom win_icon = XInternAtom(dpy, "_NET_WM_ICON", False);
Atom cardinal = XInternAtom(dpy, "CARDINAL", False);
/* create operque window */
win = XCreateSimpleWindow(dpy,
RootWindow(dpy, scrn),
0,
0,
win_width,
win_height,
border_width,
BlackPixel(dpy, scrn),
WhitePixel(dpy, scrn));
// wmHints (); // Window Manager Hints
// sizeHints (); // Window default size could be override
// classHints (); // Window class
// set up exit proc for sudden exit
XSetWMProtocols(dpy, win, &wmDeleteMsg, 1);
int main()
Display* dpy = XOpenDisplay(nullptr);
if (dpy == nullptr)
std::cout << "Failed to open display connection" << '\n';
exit(1);
Create_Window(dpy, 1);
XMapRaised(dpy, win);
XSync(dpy, false);
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
XDestroyWindow(dpy, win);
XCloseDisplay(dpy);
return 0;
【讨论】:
谢谢 Alexey104,但问题是另一个问题。如果你喜欢我可以发送一段代码供你审查?以上是关于是否可以用 C++ 为 X11 Xlib 编程而不是使用 C?的主要内容,如果未能解决你的问题,请参考以下文章