首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法编译GtkD SourceView代码

无法编译GtkD SourceView代码
EN

Stack Overflow用户
提问于 2012-11-18 15:15:53
回答 1查看 321关注 0票数 4

我是gtk编程和d的新手,并使用gtkd源代码的演示学习。当我试图编译下面的代码时,我在archlinux上使用了dmd-2.060和gtkd-2.0。

代码语言:javascript
复制
/*
    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();

}

我会犯这样的错误

代码语言:javascript
复制
/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目录上的SVTest.d文件。

编辑:我在编译DMDSVTest.d,这给了我这个错误,现在我做了DMD-L-LDL-L-lgtkd-L-lgtkdsvSVTest.d,它编译得很好。现在,如果我删除杂注语句并尝试使用编译器标志进行编译,它将失败。我在这里有点困惑,D博士说实用主义是为了把信息传递给编译器!编译源代码需要同时使用语用标志和编译器标志吗?还是我做错什么了?

更新:实际上,语用顺序很重要,我把语用改为了这个

代码语言:javascript
复制
pragma(lib, "gtkdsv");
pragma(lib, "gtkd");
pragma(lib, "dl");

现在我可以做了

代码语言:javascript
复制
dmd main.d

这是我原本想做的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-27 01:27:33

我相信链接器标志的顺序很重要。gtkd加载共享对象,并且需要libdl,所以-libdl需要放在列表的第一位。(你在终点站做的事)

尝试将语用(lib,“dl”)移到第一个点,看看这是否有区别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13441424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档