当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 12 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 求助 Anjuta + Gtkmm 的问题 已解决
帖子发表于 : 2009-08-14 1:20 

注册: 2007-03-12 20:23
帖子: 52
送出感谢: 0 次
接收感谢: 0 次
我的Ubuntu 9.04 系统

gtk_foobarwindow.hpp
代码:
#ifndef _GTK_FOOBAR_WINDOW_HPP_
#define _GTK_FOOBAR_WINDOW_HPP_

#include <libglademm.h>
#include <gtkmm.h>

class gtk_foobarWindow : public Gtk::Window
{
public:
  gtk_foobarWindow(BaseObjectType* cobject,
                    const Glib::RefPtr<Gnome::Glade::Xml>& glade_xml);
  virtual ~gtk_foobarWindow();

protected:

};

#endif // _GTK_FOOBAR_WINDOW_HPP_


gtk_foobarwindow.cc
代码:
#include "gtk_foobarwindow.hpp"

gtk_foobarWindow::gtk_foobarWindow(
  BaseObjectType* base_object,
  const Glib::RefPtr<Gnome::Glade::Xml>& glade_xml)
  : Gtk::Window(base_object)
{
}

gtk_foobarWindow::~gtk_foobarWindow()
{
}


main.cc
代码:
#include <libglademm/xml.h>
#include <gtkmm.h>
#include <iostream>
#include "gtk_foobarwindow.hpp"


#ifdef ENABLE_NLS
#  include <libintl.h>
#endif


/* For testing propose use the local (not installed) glade file */
/* #define GLADE_FILE PACKAGE_DATA_DIR"/gtk_foobar/glade/gtk_foobar.glade" */
#define GLADE_FILE "gtk_foobar.glade"
   
int
main (int argc, char *argv[])
{
   Gtk::Main kit(argc, argv);
   
   //Load the Glade file and instiate its widgets:
   Glib::RefPtr<Gnome::Glade::Xml> refXml;
   try
   {
      refXml = Gnome::Glade::Xml::create(GLADE_FILE);
   }
   catch(const Gnome::Glade::XmlError& ex)
    {
      std::cerr << ex.what() << std::endl;
      return 1;
   }
   gtk_foobarWindow* main_win = 0;
   refXml->get_widget_derived("main_window",main_win);
   if (main_win)
   {
      kit.run(*main_win);
   }
   return 0;
}

引用:
Building in directory: /home/isotope/文档/Anjuta_Project/gtk-foobar/src
make
g++ -DHAVE_CONFIG_H -I. -I.. -DPACKAGE_LOCALE_DIR=\""/usr/local/share/locale"\" -DPACKAGE_SRC_DIR=\""."\" -DPACKAGE_DATA_DIR=\""/usr/local/share"\" -D_REENTRANT -I/usr/include/gtkmm-2.4 -I/usr/lib/gtkmm-2.4/include -I/usr/include/glibmm-2.4 -I/usr/lib/glibmm-2.4/include -I/usr/include/giomm-2.4 -I/usr/lib/giomm-2.4/include -I/usr/include/gdkmm-2.4 -I/usr/lib/gdkmm-2.4/include -I/usr/include/pangomm-1.4 -I/usr/include/atkmm-1.6 -I/usr/include/gtk-2.0 -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/lib/gtk-2.0/include -I/usr/include/cairomm-1.0 -I/usr/include/pango-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/atk-1.0 -I/usr/include/libglademm-2.4 -I/usr/lib/libglademm-2.4/include -I/usr/include/libglade-2.0 -I/usr/include/libxml2 -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.cc
mv -f .deps/main.Tpo .deps/main.Po
g++ -g -O2 -o gtk_foobar main.o -lglademm-2.4 -lgtkmm-2.4 -lglade-2.0 -lgiomm-2.4 -lgdkmm-2.4 -latkmm-1.6 -lpangomm-1.4 -lcairomm-1.0 -lglibmm-2.4 -lsigc-2.0 -lgtk-x11-2.0 -lxml2 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lgio-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0
main.o: In function `gtk_foobarWindow* Gnome::Glade::Xml::get_widget_derived<gtk_foobarWindow>(Glib::ustring const&, gtk_foobarWindow*&)':
/usr/include/libglademm-2.4/libglademm/xml.h:291: undefined reference to `typeinfo for gtk_foobarWindow'
/usr/include/libglademm-2.4/libglademm/xml.h:307: undefined reference to `gtk_foobarWindow::gtk_foobarWindow(_GtkWindow*, Glib::RefPtr<Gnome::Glade::Xml> const&)'
collect2: ld 返回 1
make: *** [gtk_foobar] 错误 1
已完成 ... 失败
总共耗时:0 秒


老是编译不过,不知道谁有同样的问题,学习GTKMM真有压力,资料少,有没有哪个致力学习这个东西,结伴同行!!


最后由 雪酷龙 编辑于 2009-08-19 21:29,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: 求助 Anjuta + Gtkmm 的问题
帖子发表于 : 2009-08-14 1:35 

注册: 2007-03-12 20:23
帖子: 52
送出感谢: 0 次
接收感谢: 0 次
我自己刚刚做的Anjuta 的模板


附件:
文件注释: 解压路径/usr/share/anjuta/project
Anjuta_模板.tar.gz [3.58 KiB]
被下载 27 次
页首
 用户资料  
 
3 楼 
 文章标题 : Re: 求助 Anjuta + Gtkmm 的问题
帖子发表于 : 2009-08-14 12:13 

注册: 2007-03-12 20:23
帖子: 52
送出感谢: 0 次
接收感谢: 0 次
这是我照GTKMM的例子做的,去年上半年先是可以的,后来anjuta升级了就不行了


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 求助 Anjuta + Gtkmm 的问题
帖子发表于 : 2009-08-15 10:47 

注册: 2007-03-12 20:23
帖子: 52
送出感谢: 0 次
接收感谢: 0 次
低级问题就没有人回复吗??我真的搞不明白我传入的重载类提示未定义??~这是照着官方例子做的重载类~~


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 求助 Anjuta + Gtkmm 的问题
帖子发表于 : 2009-08-15 13:19 
头像

注册: 2009-07-07 19:52
帖子: 240
送出感谢: 0 次
接收感谢: 0 次
不用 Anjuta 的飘过~~~

根据错误提示,应该是库没包含全。更多的我也帮不了了。


_________________
阿呆 : 天下第一呆!


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 求助 Anjuta + Gtkmm 的问题
帖子发表于 : 2009-08-16 0:02 

注册: 2007-03-12 20:23
帖子: 52
送出感谢: 0 次
接收感谢: 0 次
我照论坛里的教程安装了这些包
引用:
build-essential
gnome-devel
autogen
automake
build-essential
indent
intltool
libglademm-2.4-dev
libgnomemm-2.6-dev
intltool


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 求助 Anjuta + Gtkmm 的问题
帖子发表于 : 2009-08-18 17:58 
头像

注册: 2007-07-12 16:30
帖子: 303
地址: 桂林
送出感谢: 0 次
接收感谢: 2
将:
代码:
refXml->get_widget_derived("main_window",main_win);

改成:
代码:
ref_xml->get_widget("main_window", main_window);

试试看。


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 求助 Anjuta + Gtkmm 的问题
帖子发表于 : 2009-08-19 0:57 

注册: 2007-03-12 20:23
帖子: 52
送出感谢: 0 次
接收感谢: 0 次
真感谢你的回复,我早就试过了!
引用:
/usr/include/libglademm-2.4/libglademm/xml.h:246: undefined reference to `typeinfo for gtk_foobarWindow'

查找错误点是跳到了这段代码
引用:
T_Widget* get_widget(const Glib::ustring& name, T_Widget*& widget)
{
// The dynamic_cast<> should never fail if get_widget_checked() succeeded.
错误点 widget = dynamic_cast<T_Widget*>(this->get_widget_checked(name, T_Widget::get_base_type()));

而改成refXml->get_widget_derived("main_window",main_win);
引用:
template <class T_Widget> inline
T_Widget* get_widget_derived(const Glib::ustring& name, T_Widget*& widget)
{
// initialize input parameter
widget = 0;

// Get the widget from the glade file.
typedef typename T_Widget::BaseObjectType cwidget_type;
cwidget_type* pCWidget = (cwidget_type*)get_cwidget(name);

//The error was already reported by get_cwidget().
if(!pCWidget)
return 0;

//Check whether there is already a C++ wrapper instance associated with this C instance:
Glib::ObjectBase* pObjectBase = ObjectBase::_get_current_wrapper((GObject*)pCWidget);

//If there is already a C++ instance, then return it again:
if(pObjectBase)
{
这过不去 widget = dynamic_cast<T_Widget*>( Glib::wrap((GtkWidget*)pCWidget) );
//Newer, more spec-complaint, versions of g++ not resolve a specific wrap() function in a template.

//The dynamic cast checks that it is of the correct type.
//Somebody might be trying to call get_widget_derived() after already calling get_widget(),
//or after already calling get_widget_derived() with a different derived C++ type.
if(!widget)
g_critical("Gnome::Glade::Xml::get_widget_derived(): dynamic_cast<> failed. An existing C++ instance, of a different type, seems to exist.");
}
else
{
//Create a new C++ instance to wrap the existing C instance:

//Set the output variable. We needed to do this because we can not template the return type.
Glib::RefPtr<Gnome::Glade::Xml> refThis(this);
refThis->reference(); //take a copy.
还有这 widget = new T_Widget(pCWidget, refThis);
}

//We return it as well (we need the parameter as well, because C++ can not just template the return type.)
return widget;
}


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 求助 Anjuta + Gtkmm 的问题
帖子发表于 : 2009-08-19 2:15 
头像

注册: 2007-07-12 16:30
帖子: 303
地址: 桂林
送出感谢: 0 次
接收感谢: 2
引用:
g++ -DHAVE_CONFIG_H -I. -I.. -DPACK........... -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.cc
................
................
g++ -g -O2 -o gtk_foobar main.o -lglademm-2.4 -lgtkmm-2.4 -lglade-2.0 .......

连“gtk_foobarwindow.cpp”都没加入要编译的列表中,只有 main.o,应该还有个貌似 gtk_foobarwindow.o 的东东才是(或将其并入main.o也行)。看看工程的 Makefile 文件的相关规则,再到生成 Makefile 的源文件中添加相应配置,好像记得 Makefile 文件开始的注释有说明是由谁生成它的。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 求助 Anjuta + Gtkmm 的问题
帖子发表于 : 2009-08-19 10:11 

注册: 2007-03-12 20:23
帖子: 52
送出感谢: 0 次
接收感谢: 0 次
发现用Anjuta 添加类,无法加入工程,不过以前能加入的时候也是出这个问题~~
引用:
Can not add source files

gtkfoobar-window.h: 无法更新项目

Root directory doesn't look like the root of an automake package
gtkfoobar-window.cc: 无法更新项目

Root directory doesn't look like the root of an automake package


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 求助 Anjuta + Gtkmm 的问题
帖子发表于 : 2009-08-19 18:56 

注册: 2007-03-12 20:23
帖子: 52
送出感谢: 0 次
接收感谢: 0 次
多谢提醒,,在Makefile.am里加入
引用:
gtk_foobar_SOURCES = \
main.cc \
gtk_foobarwindow.cc

就可以了,原来要引用一个头文件,不是光把它放在源代码目录,和加入#include 引入就可以用的,要在IDE加入~~我看编程语言没有这些东西的~~


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 求助 Anjuta + Gtkmm 的问题 已解决
帖子发表于 : 2009-08-20 1:27 
头像

注册: 2007-07-12 16:30
帖子: 303
地址: 桂林
送出感谢: 0 次
接收感谢: 2
唉,还是做 Anjuta 的人不够做 Netbeans 的那帮家伙,这两年 Anjuta 在软件质量方面一直没什么长进,还是问题多多、还时不时崩溃。真不知道 Netbeans 项目是谁领导的,软件工程管理得这么出色。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 12 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译