gpt4 book ai didi

d - 无法编译 GtkD SourceView 代码

转载 作者:行者123 更新时间:2023-12-01 05:26:57 28 4
gpt4 key购买 nike

我是 gtk 编程和 d 的新手,并使用来自 gtkd 源的演示进行学习。当我尝试编译下面的代码时[我在 archlinux 上使用 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 order很重要,我把pragma改成了这个
pragma(lib, "gtkdsv");
pragma(lib, "gtkd");
pragma(lib, "dl");

现在我可以做
dmd main.d

我原本想做的。

最佳答案

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

尝试移动 pragma(lib, "dl");到第一个位置,看看这是否有所不同。

关于d - 无法编译 GtkD SourceView 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13441424/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com