[英]Getting an error compiling webkit/webview app - Vala/GTK
我正在嘗試使用Vala和GTK構建我的第一個基於Webkit的應用程序。 對於語言和它們的編譯過程,我是一個新手,所以任何幫助都會很棒。
這是我收到的錯誤:
/home/elementary/GTKProjects/Fookbase/src/fookbase_main.vala:2.7-2.12:錯誤:使用WebKit找不到名稱空間名稱“ WebKit”;
/home/elementary/GTKProjects/Fookbase/src/fookbase_main.vala:13.13-13.19:錯誤:找不到類型名稱“ WebView”私有WebView web_view;
這是我的代碼:
using Gtk;
using WebKit;
public class Fookbase : Window {
private const string TITLE = "Fookbase";
private const string HOME_URL = "http://fookbase.com";
private const string DEFAULT_PROTOCOL = "http";
private Regex protocol_regex;
private Entry url_bar;
private WebView web_view;
private Label status_bar;
private ToolButton back_button;
private ToolButton forward_button;
private ToolButton reload_button;
public Fookbase () {
this.title = Fookbase.TITLE;
set_default_size (500, 800);
try {
this.protocol_regex = new Regex (".*://.*");
} catch (RegexError e) {
critical ("%s", e.message);
}
create_widgets ();
connect_signals ();
this.url_bar.grab_focus ();
}
private void create_widgets () {
var toolbar = new Toolbar ();
this.back_button = new ToolButton.from_stock (Stock.GO_BACK);
this.forward_button = new ToolButton.from_stock (Stock.GO_FORWARD);
this.reload_button = new ToolButton.from_stock (Stock.REFRESH);
toolbar.add (this.back_button);
toolbar.add (this.forward_button);
toolbar.add (this.reload_button);
this.web_view = new WebView ();
var scrolled_window = new ScrolledWindow (null, null);
scrolled_window.set_policy (PolicyType.AUTOMATIC, PolicyType.AUTOMATIC);
scrolled_window.add (this.web_view);
this.status_bar.xalign = 0;
var vbox = new VBox (false, 0);
vbox.pack_start (toolbar, false, true, 0);
vbox.pack_start (this.url_bar, false, true, 0);
vbox.add (scrolled_window);
vbox.pack_start (this.status_bar, false, true, 0);
add (vbox);
}
private void connect_signals () {
this.destroy.connect (Gtk.main_quit);
this.url_bar.activate.connect (on_activate);
this.web_view.title_changed.connect ((source, frame, title) => {
this.title = "%s - %s".printf (title, Fookbase.TITLE);
});
this.web_view.load_committed.connect ((source, frame) => {
this.url_bar.text = frame.get_uri ();
update_buttons ();
});
this.back_button.clicked.connect (this.web_view.go_back);
this.forward_button.clicked.connect (this.web_view.go_forward);
this.reload_button.clicked.connect (this.web_view.reload);
}
private void update_buttons () {
this.back_button.sensitive = this.web_view.can_go_back ();
this.forward_button.sensitive = this.web_view.can_go_forward ();
}
private void on_activate () {
var url = this.url_bar.text;
if (!this.protocol_regex.match (url)) {
url = "%s://%s".printf (Fookbase.DEFAULT_PROTOCOL, url);
}
this.web_view.open (url);
}
public void start () {
show_all ();
this.web_view.open (Fookbase.HOME_URL);
}
public static int main (string[] args) {
Gtk.init (ref args);
var browser = new Fookbase ();
browser.start ();
Gtk.main ();
return 0;
}
}
為了在Vala中使用庫,您需要將其告知編譯器。 僅在代碼中說“使用WebKit”是不夠的。 您可以通過將--pkg
標志(具有所需的值)傳遞給valac
來valac
。
幾乎所有綁定的軟件包名稱都與pkg-config名稱匹配,因此Vala編譯器可以自動確定要傳遞給C編譯器和鏈接器的正確標志。 要查看Vala提供了哪些軟件包,可以查看/usr/share/vala/vapi
和/usr/share/vala-x.yz/vapi
目錄(后者特定於您使用的valac
版本) )。 Valadoc.org也有很多軟件包的名稱。 我不確定在編寫代碼時您的引用是什么,但是通常它們會告訴您您要查看的包。
對於WebKit,如果要編寫新軟件,則可能要使用webkit2gtk-4.0
或webkit2gtk-web-extension-4.0
,它們是與gtk + -3.0鏈接的軟件包。
所以,像
valac --pkg webkit2gtk-4.0 ... your-file.vala
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.