Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Xlib'时发生访问冲突;s XCreateSimpleWindow_D_Access Violation_Xlib - Fatal编程技术网

使用Xlib'时发生访问冲突;s 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(

我试图使用我在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(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
,并删除这些子句,只留下回退分支)