加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

无法编译GtkD SourceView代码

发布时间:2020-12-13 23:23:15 所属栏目:Linux 来源:网络整理
导读:我是gtk编程和d的新手,并使用gtkd源代码学习.当我尝试编译下面的代码[我在arch linux上使用dmd-2.060和gtkd-2.0]时. /* Modified sourceview demo for learning gtk programming in d*/pragma(lib,"gtkd");pragma(lib,"gtkdsv");pragma(lib,"dl");import gtk
我是gtk编程和d的新手,并使用gtkd源代码学习.当我尝试编译下面的代码[我在arch linux上使用dmd-2.060和gtkd-2.0]时.

/*
    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并且编译得很好.现在,如果我删除pragma语句并尝试使用编译器标志进行编译,则会失败.我在这里有点困惑,D doc说pragma是用于将信息传递给编译器的!我是否需要编译指示和编译器标志来编译源代码?或者我做错了什么?

更新:确实pragma命令很重要,我改变了pragma

pragma(lib,"dl");

现在我可以做

dmd main.d

这是我原本想要做的.

解决方法

我相信链接器标志的顺序很重要. gtkd加载共享对象,并且需要libdl,因此-l-Ldl需要在列表中排在第一位. (你在终端上做过的)

尝试移动pragma(lib,“dl”);到第一个地方,看看是否有所作为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读