2

我目前正在 vala 开展一个项目,但无法编译该项目。文件通过valac,很好,但后来我得到这个错误:

C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0x437): undefined reference to gtk_source_view_new' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0x48a): undefined reference togtk_source_view_set_auto_indent' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD. o:EditorWindow.vala.c:(.text+0x4a2): 未定义引用gtk_source_view_set_indent_on_tab' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0x4ba): undefined reference togtk_source_view_set_show_line_numbers' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0x4d2):未定义引用gtk_source_view_set_highlight_current_line' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0x4ea): undefined reference togtk_source_view_set_insert_spaces_instead_of_tabs' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0xf74): 未定义引用 `gtk_source_view_get_type'

失败的文件的代码如下:

using Gtk;
using Gtk.Stock;
using Gdk;

public class EditorWindow : GLib.Object
{
    public Gtk.SourceView EditorWindow {get;set;}
    public HBox TabHeader {get;set;}
    private Gtk.Image icon {get;set;}
    private Label name {get;set;}
    private Button closeButton {get;set;}
    public unowned Notebook parent {get;set;}


    public EditorWindow(File? file = null, Notebook parent)
    {
        //Interperet file data
        if(file == null)
        {
            this.name = new Label("testPage.cs");
        }
        else
        {
            //get all necessary file data
        }

        this.TabHeader = new HBox(false, 0);
        //this.name = new Label("testPage.cs");
        this.closeButton = new Button();
        this.closeButton.set_relief(ReliefStyle.NONE);
        this.closeButton.set_focus_on_click(false);
        this.closeButton.add(new Gtk.Image.from_stock(Gtk.Stock.CLOSE, IconSize.MENU));
        this.icon = new Gtk.Image.from_stock(Gtk.Stock.FILE, IconSize.MENU);
        this.TabHeader.pack_start(this.icon, false, false, 0);
        this.TabHeader.pack_start(this.name, true, true, 0);
        this.TabHeader.pack_start(this.closeButton, false, false, 0);
        this.EditorWindow = new Gtk.SourceView();
        this.EditorWindow.auto_indent = true;
        this.EditorWindow.indent_on_tab = true;
        this.EditorWindow.show_line_numbers = true;
        this.EditorWindow.highlight_current_line = true;
        this.EditorWindow.insert_spaces_instead_of_tabs = false;
        //parent.append_page(this.EditorWindow, this.TabHeader);

        //Read libraries to register objects and methods

        //Parse all lines and provide labels


    }

    public void ParseLibraries()
    {

    }

    public void ParseLocalFiles()
    {

    }

    public void ParseProjectFiles()
    {

    }
}

该文件在这五行之后失败并显示collect2: ld returne 1 exit status.

知道如何解决这个问题吗?任何帮助将不胜感激。

编辑

我使用的命令行编译是:valac Main.vala GUI.vala EditorWindow.vala -o Valarian.exe --enable-checking --pkg gtk+-2.0 --pkg gdk-2.0 --pkg gtksourceview-2.0 --thread. 我在 Windows 上运行它,所以我使用的是 gtk/gdk/sourceview 2.0。

4

2 回答 2

0

链接时,MingW 有点奇怪。它可能需要多次引用同一个库。首先,尝试将顺序更改为 gtksourceview、gtk、gdk。这可能还不够。MingW 的链接器,由于复杂的原因,无法解析循环引用,所以你必须多次指定库。我使用valac -C然后调用:

i586-mingw32msvc-gcc -o mybin sources.cpkg-config --cflags --libs gconf-2.0 gtk+-2.0 glib-2.0 gtk+-2.0 glib-2.0 gtk+-2.0 glib-2.0

注意库的荒谬重复。如果您使用 MingW 交叉编译器进行构建,您可能还需要设置环境变量PKG_CONFIG_PATH=$(MING_ROOT)/lib/pkgconfig并将其传递给pkg-config参数--define-variable=prefix=$(MING_ROOT)

于 2012-12-17T14:45:44.890 回答
0

我不想在这里回答我自己的问题,但是由于我们的方向错误,所以这里是:

我遇到的编译器遇到“未定义引用”错误的问题是由 EditorWindow 类顶部的 SourceView 之前手动应用的命名空间“Gtk”引起的。由于 Vala 编译器的性质,它没有抛出错误,因为 SourceView 在 Gtk 命名空间下,但显然 valac 和 gcc 之间出现了问题。一旦我更改Gtk.SourceViewSourceView,程序就编译了。

于 2012-12-20T08:43:42.687 回答