2015-04-18 36 views
1

我試圖編譯下面的例子gtkmm3例如未編譯(未定義參考)

#include <gtkmm.h> 

int main(int argc, char *argv[]) 
{ 
    Glib::RefPtr<Gtk::Application> app = 
    Gtk::Application::create(argc, argv, 
     "org.gtkmm.examples.base"); 

    Gtk::Window window; 
    window.set_default_size(200, 200); 

    return app->run(window); 
} 

我使用這個命令:g++ ./gtk.cpp -o ./gtk -Wall pkg-config gtkmm-3.0 --cflags --libs和得到這個錯誤信息: /usr/local/lib/libatk-1.0.so: undefined reference to 'g_type_check_instance_is_fundamentally_a' collect2: error: ld returned 1 exit status 如何解決呢?

+0

我想你好想-l選項,事端像''-lgtkmm''。我無法找到gtkmm3二進制文件。 – gomons

回答

1

使用此:

g++ ./gtk.cpp -o ./gtk -Wall `pkg-config gtkmm-3.0 --cflags --libs` 

您需要運行pkg-config命令後加上`。

pkg-config爲編譯器提供標誌,它們必須作爲編譯器參數(pkg-config的輸出,但不是相同的pkg-config命令)傳遞。

添加`字符原因pkg-config命令輸出作爲參數添加到編譯器。

您可以使用echo只是想象這種差異:

$ echo pkg-config gtkmm-3.0 --cflags --libs 
pkg-config gtkmm-3.0 --cflags --libs 

$ echo `pkg-config gtkmm-3.0 --cflags --libs` 
-pthread -I/usr/include/gtkmm-3.0 -I/usr/lib/x86_64-linux-gnu/gtkmm-3.0/include -I/usr/include/giomm-2.4 -I/usr/lib/x86_64-linux-gnu/giomm-2.4/include -I/usr/include/gtk-3.0 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gtk-3.0/unix-print -I/usr/include/gdkmm-3.0 -I/usr/lib/x86_64-linux-gnu/gdkmm-3.0/include -I/usr/include/atk-1.0 -I/usr/include/glibmm-2.4 -I/usr/lib/x86_64-linux-gnu/glibmm-2.4/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/sigc++-2.0 -I/usr/lib/x86_64-linux-gnu/sigc++-2.0/include -I/usr/include/pango-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gio-unix-2.0/ -I/usr/include/atkmm-1.6 -I/usr/include/pangomm-1.4 -I/usr/lib/pangomm-1.4/include -I/usr/include/cairomm-1.0 -I/usr/lib/cairomm-1.0/include -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lpangomm-1.4 -lgtk-3 -lglibmm-2.4 -lcairomm-1.0 -lgdk-3 -latk-1.0 -lgio-2.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -lsigc-2.0 -lgobject-2.0 -lglib-2.0 
+0

是的,我這樣做,我只是不知道如何逃脫他們,並插入到問題 – Tony

+0

所以現在它適用於你? – jmmk

+0

不,不是。我得到這個錯誤,不知道爲什麼 – Tony