4

I am new to gtk programming and d and learning using demos from gtkd source. when i try to compile the code below [ i am using dmd-2.060 and gtkd-2.0 on archlinux ].

/*
    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();

}

I get errors like this

/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

But when i comment SourceView related code and uncomment TextView related code it compiles and runs fine.

Note: This code is from SVTest.d file on sourceView gtkd demos directory.

Edit: I was doing dmd SVTest.d to compile which was giving me that error now i did dmd -L-ldl -L-lgtkd -L-lgtkdsv SVTest.d and it compiled fine. Now if i remove the pragma statements and try to compile with compiler flags it fails. I am bit confused here, D doc said pragma was for passing information to compiler! do i need both pragma and compiler flags to compile source code? or am i doing something wrong?

Update: Indeed the pragma order mattered, I changed pragma to this

pragma(lib, "gtkdsv");
pragma(lib, "gtkd");
pragma(lib, "dl");

Now i can just do

dmd main.d

which i was originally wanting to do.

1
  • What are you using to compile? It looks like the linker can't find the needed module. Are you sure you are including them in the flags? Commented Nov 18, 2012 at 19:48

1 Answer 1

1

I believe that the order of the linker flags matters. gtkd loads shared objects, and needs libdl, so -l-Ldl needs to be first in the list. (which you did on the terminal)

Try moving pragma(lib, "dl"); to the first spot, and see if that makes a difference.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.