使用Xlib的XCreateSimpleWindow时访问冲突

时间:2014-10-26 14:38:44

标签: d access-violation xlib

我正在尝试使用我在Github(https://github.com/madadam/X11.d)上找到的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);
}

我使用Fedora 20和dmd 2.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

提前谢谢!

1 个答案:

答案 0 :(得分:1)

您正在使用的Xlib绑定不兼容64位。 (他们在应该int的地方使用longc_long,在C中进行绑定时常见的错误是C中的长度不一定与长的相同在D)

您可以通过在文档中查找这些实例来修复绑定,但更容易使用dmd -m32编译32位或找到另一组64位兼容的绑定。我之前的simpledisplay.d已经解决了这个问题,绑定代码可以在这里找到:https://github.com/adamdruppe/arsd/blob/master/simpledisplay.d#L3605并且大约有1500行。