我目前正在使用vala进行项目,但我无法编译项目。文件通过valac,很好,但后来我收到了这个错误:
C:\ Users \ Andrew \ AppData \ Local \ Temp / ccEYx9mD.o:EditorWindow.vala.c :(。text + 0x437):对
gtk_source_view_new' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0x48a): undefined reference to
gtk_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 to
gtk_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 to
gtk_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。
答案 0 :(得分: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
请注意图书馆的荒谬重复。如果使用MingW交叉编译器构建,则可能还需要设置环境变量PKG_CONFIG_PATH=$(MING_ROOT)/lib/pkgconfig
并将pkg-config
传递给--define-variable=prefix=$(MING_ROOT)
。
答案 1 :(得分:0)
我不想在这里回答我自己的问题,但由于我们看错了方向,所以这里有:
我遇到的编译器遇到“未定义引用”错误的问题是由在EditorWindow类顶部的SourceView之前手动应用的命名空间“Gtk”引起的。由于Vala编译器的性质,它没有抛出错误,因为SourceView在Gtk命名空间下,但显然valac和gcc之间出了问题。一旦我将Gtk.SourceView
更改为SourceView
,程序就会编译。