Valac "неопределенная ссылка" ошибка с gtksourceview
В настоящее время я работаю над проектом в Вала, и у меня возникают проблемы с компиляцией проекта. Файлы проходят через 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.
2 ответа
Я не люблю отвечать на свой вопрос здесь, но так как мы смотрели в неправильном направлении, вот так:
Проблема, с которой я столкнулся, когда компилятор работал с ошибками "неопределенная ссылка", была вызвана применением пространства имен "Gtk" перед SourceView в верхней части класса EditorWindow. Из-за природы компилятора Vala он не выдавал ошибку, потому что SourceView находится в пространстве имен Gtk, но, очевидно, что-то пошло не так между valac и gcc. Как только я изменился Gtk.SourceView
в SourceView
Программа скомпилирована.
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)
,