2014-10-26 91 views
2

我想直接使用D和我在Github上找到的綁定(https://github.com/madadam/X11.d)來使用Xlib。使用Xlib的XCreateSimpleWindow訪問衝突

問題是我在幾個函數(例如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

你可以嘗試在'scope(failure)'語句中測試w的值嗎?也許它會匹配其中一個[** XErrorCode值**](https://github.com/madadam/X11.d/blob/428990591bc2726f0555b137a6cc9e64a893fd9b/X11/X.d#L325)。 – 2014-10-26 16:12:43

+0

請注意[**這些X11綁定**](https://github.com/nomad-software/x11)似乎更可靠。 – 2014-10-26 16:23:23

+0

w的值與任何錯誤代碼都不匹配,並且也會有所不同。當使用你提到的X11綁定時,我得到一個鏈接錯誤:'test.o:In function'_Dmain': test.d :(。text._Dmain + 0x57):對DefaultRootWindow的未定義引用 – user3684240 2014-10-26 16:50:32

回答

1

您使用的Xlib綁定不是64位兼容的。 (他們使用的地方intlong其中由C做綁定在C長,當它應該是c_long,一個常見的錯誤是不一定相同的長d)

您可以通過查找修復綁定這些實例在文檔中,但更容易的是編譯32位與dmd -m32或找到另一組64位兼容的綁定。我的simpledisplay.d已經解決了這個問題,綁定代碼在這裏找到:https://github.com/adamdruppe/arsd/blob/master/simpledisplay.d#L3605,大約1500行。