我正在尝试使用我在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
提前谢谢!
答案 0 :(得分:1)
您正在使用的Xlib绑定不兼容64位。 (他们在应该int
的地方使用long
或c_long
,在C中进行绑定时常见的错误是C中的长度不一定与长的相同在D)
您可以通过在文档中查找这些实例来修复绑定,但更容易使用dmd -m32
编译32位或找到另一组64位兼容的绑定。我之前的simpledisplay.d已经解决了这个问题,绑定代码可以在这里找到:https://github.com/adamdruppe/arsd/blob/master/simpledisplay.d#L3605并且大约有1500行。