Eclipse и Gtkmm - "неопределенная ссылка на"

Я использую Eclipse, и я хотел использовать в нем gtkmm. У меня есть следующий код:

#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;
}

я добавил pkg-config --cflags --libs gtkmm-3.0 (с серьезными акцентами, конечно) для Cross G ++ Compiler Разные опции в флаги Other и то же самое для Cross G ++ Compiler Разные опции в флаги Linker. И это не работает!

Вот журнал компиляции:

**** 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 ****

И я не знаю почему... Когда я компилирую это в терминале: g++ -O0 -g3 -Wall -c -fmessage-length=0 'pkg-config --cflags --libs gtkmm-3.0' -o ./test ./main.cpp оно работает...

2 ответа

Решение

Я нашел решение: в настройках компоновщика, в шаблоне командной строки я переехал ${FLAGS} до конца, например:

До: ${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}

После: ${COMMAND} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}

И теперь это работает.

Вы должны разделить на pkg-config --cflags <etc> добавить туда, где он сейчас (параметры компилятора), а затем добавить pkg-config --libs <etc> к настройкам компоновщика

Другие вопросы по тегам