使用Xlib'时发生访问冲突;s XCreateSimpleWindow
我试图使用我在Github()上找到的D和绑定直接使用Xlib 问题是我在几个函数(例如XCreateSimpleWindow)中遇到访问冲突。我创建了一个简单的示例:使用Xlib'时发生访问冲突;s XCreateSimpleWindow,d,access-violation,xlib,D,Access Violation,Xlib,我试图使用我在Github()上找到的D和绑定直接使用Xlib 问题是我在几个函数(例如XCreateSimpleWindow)中遇到访问冲突。我创建了一个简单的示例: module test; import X11.Xlib; import std.stdio; void main() { Display* d = XOpenDisplay(null); assert(!(d is null)); Window w = XCreateSimpleWindow(
module test;
import X11.Xlib;
import std.stdio;
void main()
{
Display* d = XOpenDisplay(null);
assert(!(d is null));
Window w = XCreateSimpleWindow(d, DefaultRootWindow(d), 0, 0, 200, 100, 0, 0, 0);
}
我使用Fedora20和DMD2.066
编辑1:@user3661500要求我发布应用程序的输出:
Access violation (dump written)
提示:我必须翻译它,因为我的系统语言是德语
编辑2:@Adam D.Ruppe:我在尝试您的文件时遇到链接错误:
dmd color.d static.d simpledisplay.d -L-lX11
/usr/bin/ld: color.o: undefined reference to symbol 'XShmPutImage'
/usr/bin/ld: note: 'XShmPutImage' is defined in DSO /lib64/libXext.so.6 so try adding it to the linker command line
/lib64/libXext.so.6: could not read symbols: Invalid operation
提前谢谢你 您使用的Xlib绑定与64位不兼容。(他们在应该是
c_long
的地方使用int
或long
,这是从c进行绑定时的一个常见错误,因为c中的long不一定与D中的long相同)
您可以通过在文档中查找这些实例来修复绑定,但是使用
dmd-m32
编译32位或查找另一组64位兼容的绑定更容易。我的simpledisplay.d以前解决过这个问题,绑定代码在这里:大约有1500行长。能否尝试在范围(失败)
语句中测试w的值?也许它会匹配其中一个。请注意,这似乎更可靠。w的值与任何错误代码都不匹配,而且它也会变化。当使用您提到的X11绑定时,我得到一个链接错误:test.o:In function
\u-Dmain:test.d:(.text.\u-Dmain+0x57):未定义对DefaultRootWindow'
的引用,我使用dmd-test.d-L-lX11
我的simpledisplay.d绑定集编译。您可以在不使用xshm的情况下复制/粘贴Xlib部分。您想要的部分在第3605行和第4953行之间,搜索文件中的“这里需要X11绑定”,您希望该位包含在该版本块中。如果在xshm库中链接或编辑代码以注释该部分,也可以使用整个库(在代码中搜索usingXshm
,并删除这些子句,只留下回退分支)