我是新來的gtk編程和d和學習使用gtkd源演示。當我嘗試編譯下面的代碼[我在archlinux上使用dmd-2.060和gtkd-2.0]。無法編譯GtkD SourceView代碼
/*
Modified sourceview demo for learning gtk programming in d
*/
pragma(lib, "gtkd");
pragma(lib, "gtkdsv");
pragma(lib, "dl");
import gtk.MainWindow;
import gtk.Main;
import gtk.Widget;
//import gtk.TextView;
import gsv.SourceView;
import std.stdio;
import std.file;
/**
* Demos for SourceView.
* TODO on gsv: override methods from TextView, TextBuffer, etc
*/
class HelloWorld : MainWindow
{
SourceView sourceView;
//TextView textView;
this()
{
super("GtkD SourceView");
setBorderWidth(10);
add(getSourceView());
setDefaultSize(640,400);
showAll();
}
private Widget getSourceView()
{
sourceView = new SourceView();
return sourceView;
//textView = new TextView();
//return textView;
}
}
void main(string[] args)
{
Main.init(args);
new HelloWorld();
Main.run();
}
我得到象這樣的錯誤
/usr/lib/libgtkdsv.a(SourceCompletionInfo.o):(.data+0x140): undefined reference to `_D3gtk8TextView12__ModuleInfoZ'
/usr/lib/libgtkdsv.a(SourceGutterRenderer.o):(.data+0xe8): undefined reference to `_D3gtk8TextView12__ModuleInfoZ'
/usr/lib/libgtkdsv.a(SourceGutterRenderer.o): In function `_D3gsv20SourceGutterRenderer20SourceGutterRenderer7getViewMFZC3gtk8TextView8TextView':
(.text._D3gsv20SourceGutterRenderer20SourceGutterRenderer7getViewMFZC3gtk8TextView8TextView+0x7e): undefined reference to `_D3gtk8TextView8TextView7__ClassZ'
/usr/lib/libgtkdsv.a(SourceGutterRenderer.o): In function `_D3gsv20SourceGutterRenderer20SourceGutterRenderer7getViewMFZC3gtk8TextView8TextView':
(.text._D3gsv20SourceGutterRenderer20SourceGutterRenderer7getViewMFZC3gtk8TextView8TextView+0x94): undefined reference to `_D3gtk8TextView8TextView6__ctorMFPS4gtkc8gtktypes11GtkTextViewZC3gtk8TextView8TextView'
collect2: error: ld returned 1 exit status
--- errorlevel 1
但是,當我評論SourceView相關的代碼並取消的TextView相關的代碼可以編譯和運行良好。
注意:此代碼來自sourceView gtkd demos目錄中的SVTest.d文件。
編輯:我是做DMD SVTest.d編譯這是給我的錯誤,現在我做到了 DMD -L-LDL -L-lgtkd -L-lgtkdsv SVTest.d它編譯精細。現在,如果我刪除了編譯指示語句並嘗試用編譯器標誌進行編譯,它就會失敗。我在這裏有點困惑,D doc說pragma是用來傳遞信息給編譯器的!我是否需要編譯器標記和編譯器標記來編譯源代碼?或者我做錯了什麼?
更新:事實上,編譯順序要緊,我改變了編譯這個
pragma(lib, "gtkdsv");
pragma(lib, "gtkd");
pragma(lib, "dl");
現在就可以做
dmd main.d
我本來想這樣做。
你用什麼來編譯?它看起來像鏈接器找不到所需的模塊。你確定你在旗幟中包括他們嗎? – scry