저는 gtkd 소스의 데모를 사용하여 gtk 프로그래밍 및 d와 학습에 익숙하지 않습니다. 아래의 코드를 컴파일하려고하면 [archlinux에서 dmd-2.060과 gtkd-2.0을 사용하고 있습니다].GtkD 소스 뷰 코드를 컴파일 할 수 없습니다.
/*
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 관련 코드 및 주석 텍스트 뷰 관련 코드를 언급 할 때 컴파일과 잘 실행됩니다.
참고 :이 코드는 sourceView gtkd demos 디렉토리의 SVTest.d 파일에 있습니다.
는편집 : 나는 DMD 내가했던 지금 나에게 그 오류를 제공 한 컴파일을 SVTest.d하고 있었다 은 -L-lgtkd -L-lgtkdsv이을 SVTest.d -L-LDL은 그것은 컴파일 된 DMD 벌금. 이제 pragma 문을 제거하고 컴파일러 플래그로 컴파일하려고하면 실패합니다. 나는 여기에서 약간 혼란 스럽다. D doc는 pragma가 컴파일러에게 정보를 전달하기위한 것이라고 말했다. 소스 코드를 컴파일하는 데 pragma 및 컴파일러 플래그가 모두 필요합니까? 아니면 내가 뭔가 잘못하고있는거야?
업데이트는 : 실제로 프라 그마 순서는 내가 원래 싶고 된 지금은 단지
dmd main.d
을 할 수있는 나는이
pragma(lib, "gtkdsv");
pragma(lib, "gtkd");
pragma(lib, "dl");
에 프라그를 변경, 중요.
컴파일 할 때 무엇을 사용하고 있습니까? 링커가 필요한 모듈을 찾을 수없는 것 같습니다. 플래그에 그들을 포함 시키시겠습니까? – scry