2011-12-13 8 views
8

Używam Eclipse i chciałem użyć w nim gtkmm. Mam następujący kod:Eclipse i Gtkmm - "niezdefiniowane odniesienie do"

#include <gtkmm.h> 
#include <iostream> 

int main(int argc, char *argv[]) { 
    Gtk::Main kit(argc, argv); 

    Gtk::Window mainWindow; 

    Gtk::Button button("Click here"); 

    mainWindow.set_title("Eclipse/GTKmm Demo"); 
    mainWindow.set_border_width(4); 
    mainWindow.set_default_size(200, 50); 

    mainWindow.add(button); 
    button.show(); 

    Gtk::Main::run(mainWindow); 

    return 0; 
} 

I dodaną pkg-config --cflags --libs gtkmm-3.0 (z grawis, oczywiście) Cross opcje G ++ Compiler Miscellanous do innych flag i tym samym do opcji Krzyż G ++ Compiler Miscellanous język Linker flagami. I to nie działa!

Oto log kompilacji:

**** Build of configuration Debug for project User Directory Changer **** 

make all 
Building file: ../main.cpp 
Invoking: Cross G++ Compiler 
g++ -O0 -g3 -Wall -c -fmessage-length=0 `pkg-config --cflags --libs gtkmm-3.0` -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp" 
Finished building: ../main.cpp 

Building target: User Directory Changer 
Invoking: Cross G++ Linker 
g++ `pkg-config --cflags --libs gtkmm-3.0` -o "User Directory Changer" ./main.o 
./main.o: In function `main': 
/home/m4tx1/Dropbox/Projects/User Directory Changer/Debug/../main.cpp:12: undefined reference to `Gtk::Main::Main(int&, char**&, bool)' 
/home/m4tx1/Dropbox/Projects/User Directory Changer/Debug/../main.cpp:14: undefined reference to `Gtk::Window::Window(Gtk::WindowType)' 
/home/m4tx1/Dropbox/Projects/User Directory Changer/Debug/../main.cpp:16: undefined reference to `Glib::ustring::ustring(char const*)' 
/home/m4tx1/Dropbox/Projects/User Directory Changer/Debug/../main.cpp:16: undefined reference to `Gtk::Button::Button(Glib::ustring const&, bool)' 
/home/m4tx1/Dropbox/Projects/User Directory Changer/Debug/../main.cpp:16: undefined reference to `Glib::ustring::~ustring()' 
/home/m4tx1/Dropbox/Projects/User Directory Changer/Debug/../main.cpp:18: undefined reference to `Glib::ustring::ustring(char const*)' 
[etc...] 
collect2: ld returned 1 exit status 
make: *** [User Directory Changer] Error 1 

**** Build Finished **** 

I nie wiem dlaczego ... Kiedy go skompilować w terminalu przez: g++ -O0 -g3 -Wall -c -fmessage-length=0 'pkg-config --cflags --libs gtkmm-3.0' -o ./test ./main.cpp to działa ...

Odpowiedz

12

znalazłem rozwiązanie: w opcji linkera w Command Line wzór przeniosłem ${FLAGS} t O końcu, np .:

Przed: ${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}

Po: ${COMMAND} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}

a teraz działa.

+0

dzięki za rozwiązanie, to prawie doprowadziło mnie do szału – Alex

+0

również dziękuję.Zmarowałem tak dużo czasu na to –

+0

Wow, dzięki! Jak odkryłeś, że to było rozwiązanie? – Dai

1

Musisz podzielić się z pkg-config --cflags <etc> dodać tam gdzie jest teraz (opcje kompilatora), a następnie dodać pkg-config --libs <etc> do opcji linkera

+0

Tak, próbowałem go, ale ... To też nie działa :( – m4tx

+0

U musi zrobić coś złego, ponieważ MUSI biec, zrobiłem to wiele razy i zawsze działa – Hauleth

+2

OK, dziękuję dla pomocy Znalazłem rozwiązanie: redagowałem wzorzec Linker Command Line - przeniosłem $ {FLAGS} do końca – m4tx