使用 gtkmm 编译 gtk 程序时出错
Posted
技术标签:
【中文标题】使用 gtkmm 编译 gtk 程序时出错【英文标题】:Errors in compiling gtk program with gtkmm 【发布时间】:2016-11-25 05:10:23 【问题描述】:我使用 glade 设计器制作了一个 GUI,并将功能封装在一个类中。这是我编写的类定义:
#ifndef _CLIPSWINDOW_H
#define _CLIPSWINDOW_H
#include <gtkmm.h>
class ClipsWindow : public Gtk::Window
public:
ClipsWindow(BaseObjectType * cobject, const Glib::RefPtr<Gtk::Builder> &refGlade);
~ClipsWindow();
protected:
Glib::RefPtr<Gtk::Builder> builder;
//MainWindow
Gtk::Window *main_window;
// Control buttons.
Gtk::Button *agenda_btn; // buttons to contain the control buttons in the GUI.
Gtk::Button *fact_btn;
Gtk::Button *run_btn;
Gtk::Button *reset_btn;
// Menu options.
//Gtk::MenuButton *options; // Get the options menu
Gtk::MenuItem *load_item; // Menu items for the "Options menu"
Gtk::MenuItem *save_item;
Gtk::MenuItem *change_strategy_item;
//Gtk::MenuButton *help;
Gtk::MenuItem *about_item; // Menu item for the "Help Menu"
// signal handlers for buttons.
void on_agendabtn_clicked();
void on_factbtn_clicked();
void on_runbtn_clicked();
void on_resetbtn_clicked();
// signal handlers for menu items.
void on_load_activate();
void on_StrategyOption_activate();
void on_SaveOption_activate();
void AboutItem_activate_cb();
;
#endif
主函数如下所示:
Gtk::Main kit(argc,argv);
//auto app = Gtk::Application::create(argc, argv, "clipsgui.clemson.edu");
Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("clipswindow.glade");
ClipsWindow *cw = 0;
builder->get_widget_derived("main_window", cw);
kit.run(*cw);
我已经注意将底层 Cobject 传递给 Gtk::Window
的构造函数。当我尝试使用命令g++ main_app.cpp -o main
pkg-config --cflags --libs gtkmm-3.0 编译此程序时,我得到一个.pthread
文件,或者在尝试单独编译文件时,错误是`gtkmm no这样的文件或目录。但是,我通过创建一个小型驱动程序测试了 gtkmm,它编译得很好。知道我可能做错了什么吗?
谢谢。
编辑:here 是我的项目的 github 存储库。构建clipswindow.o
时出现小错误,但错误仍然存在。
【问题讨论】:
因为我无法重现您的错误。不完整的代码,不知道你是如何真正编译你的代码的。只能进行猜测,并在猜测时检查您对 g++ 的选择。 我已经为我的代码添加了 github repo。请看一下?你是如何编译程序的? 【参考方案1】:CC=g++
GTK_COMPILE_FLAGS=pkg-config gtkmm-3.0 --cflags --libs
main: main_app.o clipswindow.o
$(CC) main_app.o clipswindow.o -o main`$(GTK_COMPILE_FLAGS)`
main_app.o: main_app.cpp clipswindow.h
$(CC) main_app.cpp -o main.o `$(GTK_COMPILE_FLAGS)`
clipswindow.o: clipswindow.cpp clipswindow.h
$(CC) clipswindow.cpp -o main.o`$(GTK_COMPILE_FLAGS)`
问题在于您的 makefile,而不是您在此处提供的代码示例。您已将 main_app.cpp 和 clipswindow.cpp 设置为输出 main.o,因此其中一个将覆盖另一个。它们与您要构建的内容不匹配。接下来你之前缺少一个空格
`$(GTK_COMPILE_FLAGS)`
这就是为什么将 pthread 附加到文件名的原因。
【讨论】:
谢谢。你说的是then ``标签之间的空格吗? 已编辑,`` 被当作引号。是在``标签之前以上是关于使用 gtkmm 编译 gtk 程序时出错的主要内容,如果未能解决你的问题,请参考以下文章
为 gtk、gtkmm 和 opencv 更正 CMakeLists.txt 文件
gtkmm 对某些 gtk::builder 函数 add_from_file 的未定义引用
“Gtk-WARNING **:无法打开显示:”在 Eclipse 中运行 gtkmm 项目时