Gcc 瓦拉克“;“未定义引用”;gtksourceview出错

Gcc 瓦拉克“;“未定义引用”;gtksourceview出错,gcc,gtk,mingw,vala,gtksourceview,Gcc,Gtk,Mingw,Vala,Gtksourceview,我目前正在瓦拉的一个项目上工作,我在编译这个项目时遇到了困难。文件通过valac,很好,但我得到了以下错误: C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.C:(.text+0x437):未定义对gtk\u source\u view\u new'的引用 C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.C:(.text+0x48a):未

我目前正在瓦拉的一个项目上工作,我在编译这个项目时遇到了困难。文件通过valac,很好,但我得到了以下错误:

C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.C:(.text+0x437):未定义对
gtk\u source\u view\u new'的引用
C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.C:(.text+0x48a):未定义对
gtk\u源视图\u集\u自动缩进的引用' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.C:(.text+0x4a2):未定义对
gtk\u source\u view\u set\u indent\u选项卡的引用
C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.C:(.text+0x4ba):未定义对
gtk\u源代码\u视图\u集\u显示\u线号\u的引用 C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.C:(.text+0x4d2):未定义对
gtk\u源代码\u视图\u集\u高亮显示\u当前\u行的引用”
C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.C:(.text+0x4ea):未定义对
gtk\u源视图\u集\u插入空格\u而非选项卡的引用 C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.C:(.text+0xf74):未定义对“gtk\u source\u view\u get\u 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

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

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


请注意图书馆的荒谬重复。如果您正在使用MingW交叉编译器进行构建,您可能还需要设置环境变量
PKG\u CONFIG\u PATH=$(MING\u ROOT)/lib/pkgconfig
,并将参数
-define variable=prefix=$(MING\u ROOT)

传递到
PKG CONFIG
并传递给
,但既然我们看错了方向,下面是:


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

您应该通知valac您正在使用Gtk软件包。编译时使用的命令行是什么?我使用了
valac Main.vala GUI.vala EditorWindow.vala-o Valarian.exe--启用检查--pkg gtk+-2.0--pkg gdk-2.0--pkg gtksourceview-2.0--thread
。尝试使用:valac-o Valarian.exe--启用检查--pkg gtk+-2.0--pkg gtksourceview-2.0--thread Main.vala GUI.valaEditorWindow.valaAlso,根据这个():您必须将环境变量PKG_CONFIG_PATH设置为指向.pc文件所在的位置。然后告诉valac您希望与--pkg=一起使用哪些包。例如:valac Gtk-01 Gtk-01.vala--pkg=Gtk+-2.0I在发布问题之前,gtksourceview_2.0.pc驻留在该路径指定的目录中。我也有这个包的dll.a文件,虽然我不知道是否真的需要它,并且它位于不同的路径下。您不需要重复,您需要将cflags与libs分开:您能告诉我将cflags与libs分开的实际命令是什么吗?我也没有使用linux。你能给我一个实际的命令行编译这个的例子吗,因为我还不能让它工作。