当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 如何制作将这个文件制作成so文件
帖子发表于 : 2008-06-03 2:51 
头像

注册: 2006-07-31 22:55
帖子: 287
送出感谢: 0 次
接收感谢: 0 次
这个代码是xfce4-mcs-plugins-extra中关于menueditor的源代码(menueditor.c),即系统中/usr/lib/xfce4/mcs-plugins/menueditor_plugin.so就是它生成的,从而可以在xfce4桌面的xfce-mcs-manager配置面板中加载“菜单编辑器“设置工具。问题是menueditor_plugin.so是如何利用下面的代码编译的?下面是我的尝试,请大家赐教究竟如何操作?

gcc menueditor.c -fPIC -shared -o menueditor.so
终端获得的输出:
代码:
menueditor.c:30:39: 错误: libxfce4util/libxfce4util.h:没有该文件或目录
menueditor.c:31:37: 错误: libxfcegui4/libxfcegui4.h:没有该文件或目录
menueditor.c:32:37: 错误: libxfce4mcs/mcs-manager.h:没有该文件或目录
menueditor.c:33:45: 错误: xfce-mcs-manager/manager-plugin.h:没有该文件或目录
menueditor.c:39: 错误: expected ‘)’ before ‘*’ token
menueditor.c:44: 错误: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘mcs_plugin_init’
menueditor.c:74: 错误: expected ‘)’ before ‘*’ token


menueditor.c的源码:

代码:
/*
 * Copyright (C) 2007-2008 Gauvain Pocentek <gpocentek@linutop.com>
 *
 * Mostly taken from the gsynaptics mcs plugin
 * Copyright (c) 2004 Danny Milosavljevic <danny_milo@yahoo.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; You may only use version 2 of the License,
 * you have no option to use any other version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif

#include <libxfce4util/libxfce4util.h>
#include <libxfcegui4/libxfcegui4.h>
#include <libxfce4mcs/mcs-manager.h>
#include <xfce-mcs-manager/manager-plugin.h>

#define EXE "xfce4-menueditor"
#define ICON "xfce4-menueditor"

/* static prototypes */
static void run_dialog (McsPlugin *);

/*
 */
McsPluginInitResult
mcs_plugin_init (McsPlugin * plugin)
{
   gchar *where = NULL;

   xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");

   plugin->plugin_name = g_strdup ("menueditor");
   plugin->caption = g_strdup (Q_("Button Label|Menu editor"));
   plugin->run_dialog = run_dialog;
   plugin->icon = xfce_themed_icon_load (ICON, 32);
   if (plugin->icon)
      g_object_set_data_full (G_OBJECT (plugin->icon),
                              "mcs-plugin-icon-name",
               g_strdup (ICON),
               g_free);

   where = g_find_program_in_path (EXE);
   if (where)
   {
      g_free (where);
      return (MCS_PLUGIN_INIT_OK);
   }

   g_free (where);
   return (MCS_PLUGIN_INIT_ERROR);
}

/*
 *  */
static void
run_dialog (McsPlugin * plugin)
{
   xfce_exec(EXE, FALSE, FALSE, NULL);
}
   


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-06-03 7:57 

注册: 2006-03-10 15:10
帖子: 3182
地址: xi'an China
送出感谢: 0 次
接收感谢: 2
先把缺少的头文件找到


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-06-03 8:32 
头像

注册: 2006-07-31 22:55
帖子: 287
送出感谢: 0 次
接收感谢: 0 次
找到头文件在/usr/include/xfce4下,采用了如下命令编译:
gcc aptsources.c -fPIC -shared -o aptsources.so -I /usr/include/xfce4
但是问题还是多多。


#include <libxfce4util/libxfce4util.h>
#include <libxfcegui4/libxfcegui4.h>
#include <libxfce4mcs/mcs-manager.h>
#include <xfce-mcs-manager/manager-plugin.h>


去掉这个头文件申明行列,直接编译得到下面的结果:

代码:
menueditor.c:39: 错误: expected ‘)’ before ‘*’ token
menueditor.c:44: 错误: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘mcs_plugin_init’
menueditor.c:74: 错误: expected ‘)’ before ‘*’ token
 


看来,头文件即使不引用,编译过程还是会在39行(下面的代码
static void run_dialog (McsPlugin *);开始)出现错误。错误提示中的*错误,预示了什么呢?

/* static prototypes */
static void run_dialog (McsPlugin *);

/*
*/
McsPluginInitResult
mcs_plugin_init (McsPlugin * plugin)
{
gchar *where = NULL;

xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");

plugin->plugin_name = g_strdup ("menueditor");
plugin->caption = g_strdup (Q_("Button Label|Menu editor"));
plugin->run_dialog = run_dialog;
plugin->icon = xfce_themed_icon_load (ICON, 32);
if (plugin->icon)
g_object_set_data_full (G_OBJECT (plugin->icon),
"mcs-plugin-icon-name",
g_strdup (ICON),
g_free);

where = g_find_program_in_path (EXE);
if (where)
{
g_free (where);
return (MCS_PLUGIN_INIT_OK);
}

g_free (where);
return (MCS_PLUGIN_INIT_ERROR);
}

/*
* */
static void
run_dialog (McsPlugin * plugin)
{
xfce_exec(EXE, FALSE, FALSE, NULL);
}


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-06-05 16:29 
头像

注册: 2006-07-31 22:55
帖子: 287
送出感谢: 0 次
接收感谢: 0 次
经过向源代码作者请教,现在终于解决这个问题了,具体的操作方法如下:

首先下载相应的源码,地址在http://ftp.daum.net/ubuntu/pool/universe/x/xfce-mcs-plugins-extra/xfce-mcs-plugins-extra_2.0.orig.tar.gz

下载后,解压文档,得到xfce-mcs-plugins-extra-2.0文档,内含的src就是相关插件的原代码,如fce-mcs-plugins-extra-2.0/src/menueditor/menueditor.c

将其编译成so,需要libxfce4mcs-manager和libxfcegui支持,而且需要安装pkg-config:
sudo apt-get install pkg-config

利用它可以查询系统里libxfce4mcs-manager和libxfcegui的版本号:

pkg-config --list-all

如在ubuntu8.04中可以看到libxfce4mcs-manager-1.0和libxfcegui4-1.0

现在进入到fce-mcs-plugins-extra-2.0/src/menueditor/目录下,采用下面命令就可以编译so文件了:

gcc -DHAVE_CONFIG_H -I../.. -DLOCALEDIR=\"/usr/share/locale\" -shared -Wl,-soname -Wl,menueditor_plugin.so $(pkg-config --libs --cflags libxfce4mcs-manager-1.0 libxfcegui4-1.0) menueditor.c -o menueditor_plugin.so

如果你想为xfce设置面板添加更多的设置器,那么可以根据menueditor.c进行修改,然后采用上面的命令进行编译,将编译的结果打包进xfce-mcs-plugins-extra中,形成可以安装的deb包,然后进行安装,就可获得下面图形中所显示的多种设置管理器。


附件:
xfce-settings.png
xfce-settings.png [ 74.82 KiB | 被浏览 1033 次 ]

页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-06-06 18:07 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
好东西~mark :lol:


_________________
HUNT Unfortunately No Talent...


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

当前时区为 UTC + 8 小时


在线用户

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


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

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

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