编译XFCE4面板插件

时间:2013-05-30 23:58:25

标签: c linux xfce

我正在将gnome面板小程序转换为xfce面板插件。到目前为止,我已删除了源中的一些gnome特定部分,并在适当时用xfce特定源替换它们。

我使用诸如天气插件和示例插件之类的模板创建了makefile.am和configure.ac文件。但是我没有成功地编译它。我可能遗漏了一些明显的东西,但我用我自己的文件仔细检查了这些例子,发现没有明显的问题。

我已经附加了相应的文件以及错误的输出,希望有人有个主意。我不认为问题出在实际来源中,但如果有必要,我可以稍后添加一些。

编译时的错误:

make  all-recursive
make[1]: Entering directory `/source/my_example_xfce'
Making all in panel-plugin
make[2]: Entering directory `/source/my_example_xfce/panel-plugin'
gcc -DHAVE_CONFIG_H -I. -I.. -I.. -DTHEMESDIR=\"/usr/local/share/xfce4/my_example/icons\" -DPACKAGE_LOCALE_DIR=\"/usr/local/share/locale\" -DG_LOG_DOMAIN=\"my_example\" -DNDEBUG -pthread -I/usr/include/xfce4/libxfce4panel-1.0 -I/usr/include/gtk-2.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/xfce4   -pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/atk-1.0 -I/usr/include/xfce4   -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/xfce4 -pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12                                                         -g -O2 -MT xfce4_my_example_plugin-my_example.o -MD -MP -MF .deps/xfce4_my_example_plugin-my_example.Tpo -c -o xfce4_my_example_plugin-my_example.o `test -f 'my_example.c' || echo './'`my_example.c

my_example.c:25:25: warning: ‘struct Example_Data’ declared inside parameter list [enabled by default]
my_example.c:25:25: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
my_example.c: In function ‘setdefaults’:
my_example.c:28:3: warning: incompatible implicit declaration of built-in function ‘strncpy’ [enabled by default]
my_example.c:28:21: error: dereferencing pointer to incomplete type
my_example.c:28:45: warning: incompatible implicit declaration of built-in function ‘strlen’ [enabled by default]
my_example.c:28:3: warning: passing argument 1 of ‘strlen’ makes pointer from integer without a cast [enabled by default]
my_example.c:28:3: note: expected ‘const char *’ but argument is of type ‘int’
my_example.c:28:3: warning: passing argument 2 of ‘strncpy’ makes pointer from integer without a cast [enabled by default]
my_example.c:28:3: note: expected ‘const char *’ but argument is of type ‘int’
my_example.c:30:21: error: dereferencing pointer to incomplete type
my_example.c:30:42: error: dereferencing pointer to incomplete type
my_example.c:30:67: error: dereferencing pointer to incomplete type
my_example.c:31:3: warning: incompatible implicit declaration of built-in function ‘strncat’ [enabled by default]
my_example.c:31:21: error: dereferencing pointer to incomplete type
my_example.c:31:32: error: ‘SIGFILE’ undeclared (first use in this function)

SIGFILE是我头文件中的定义之一。然后它继续,好像它从来没有读过我的头文件和所有的声明。

最后一位:

my_example.c:248:17: error: unknown type name ‘XfcePanelPlugin’
my_example.c:248:42: error: unknown type name ‘GtkWidget’
my_example.c:248:60: error: unknown type name ‘GtkWidget’
make[2]: *** [xfce4_my_example_plugin-example.o] Error 1
make[2]: Leaving directory `/source/my_example_xfce/panel-plugin'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/source/my_example_xfce'
make: *** [all] Error 2 

下面我粘贴了Makefile.am,configure.ac和panel-plugin / Makefile.am,它们是xfce4 xdt-autgen工具所必需的,当在源目录中运行时,它将生成相应的make和configure文件。

***************
* Makefile.am *
***************

SUBDIRS =                                                               \
        panel-plugin                                                            \
        po

AUTOMAKE_OPTIONS =                                                      \
        1.8                                                             \
        dist-bzip2


*****************
* configure.ac  *
*****************

dnl Version information
m4_define([my_example_version_major], [1])
m4_define([my_example_version_minor], [3])
m4_define([my_example_version_micro], [0])
m4_define([my_example_version], [my_example_version_major().my_example_version_minor().my_example_version_micro()])

dnl Initialize autoconf
AC_COPYRIGHT([Copyright (c) 2013
        Example <bug@example.org>])
AC_INIT([xfce4-my_example-plugin], [my_example_version()], [bug@example.org])
AC_PREREQ([2.50])

dnl Initialize automake
AM_INIT_AUTOMAKE([1.8 dist-bzip2 tar-ustar])
AM_CONFIG_HEADER([config.h])
AM_MAINTAINER_MODE()

dnl Check for basic programs
AC_PROG_CC()
AC_PROG_LD()
AC_PROG_INSTALL()
AC_PROG_INTLTOOL()
AC_PROG_LIBTOOL()
AM_PROG_CC_C_O()

dnl Check for standard headers
AC_HEADER_STDC()
AC_CHECK_HEADERS([string.h fcntl.h errno.h sys/socket.h netdb.h \
                  netinet/in.h sys/types.h time.h unistd.h stdio.h \
                  sys/stat.h stddef.h stdlib.h netinet/in.h])

dnl Check for i18n support
XDT_I18N([])

dnl Check for required packages
XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.6.0])
XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [2.6.0])
XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.3.90.2])
XDT_CHECK_PACKAGE([LIBXFCEGUI4], [libxfcegui4-1.0], [4.3.90.2])
XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-1.0], [4.3.99.1])

dnl Check for debugging support
XDT_FEATURE_DEBUG()

AC_OUTPUT([
Makefile
po/Makefile.in
panel-plugin/Makefile
])


****************************
* panel-plugin/Makefile.am *
****************************

INCLUDES =                                                              \
        -I$(top_srcdir)                                                 \
        -DTHEMESDIR=\"$(datadir)/xfce4/my_example/icons\"                       \
        -DPACKAGE_LOCALE_DIR=\"$(localedir)\"                           \
        -DG_LOG_DOMAIN=\"my_example\"
plugin_PROGRAMS =                                                       \
        xfce4-my_example-plugin

plugindir = $(libexecdir)/xfce4/panel-plugins

xfce4_my_example_plugin_SOURCES =                                               \
        my_example_dat.h                                                    \
        my_example_func.h                                                   \
        my_example_images.h                                                     \
        my_example_applet.c                                                     \
        my_example.c                                                            \
        my_example_processdata.c                                                \
        my_example_menu.c

xfce4_my_example_plugin_CFLAGS =                                                \
        $(LIBXFCE4PANEL_CFLAGS)                                         \
        $(LIBXFCEGUI4_CFLAGS)                                           \
        $(LIBXFCE4UTIL_CFLAGS)                                          \
        $(GTK_CFLAGS)

xfce4_my_example_plugin_LDADD =                                                 \
        $(LIBXFCE4PANEL_LIBS)                                           \
        $(LIBXFCE4UTIL_LIBS)                                            \
        $(LIBXFCEGUI4_LIBS)                                             \
        $(GTK_LIBS)

desktopdir = $(datadir)/xfce4/panel-plugins

desktop_DATA =                                                          \
        my_example.desktop

@INTLTOOL_DESKTOP_RULE@

EXTRA_DIST =                                                            \
        my_example.desktop.in

CLEANFILES =                                                            \
        $(desktop_DATA)

# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:

我的源文件中包含正确的头文件,另外源文件在进行xfce4相关更改之前编译正常。

Makefile.am

xfce4_my_example_plugin_SOURCES =     \
example_dat.h                                                    \
example_func.h                                                   \
example_images.h                                                 \
example_applet.c                                                 \
example.c                                                        \
example_processdata.c                                            \
example_menu.c

来自example_applet.c,这是输入的第一个源文件。最初我只有“xfce4_my_example_plugin_SOURCES = example_applet.c”,因为其余的将通过该文件找到。它给出了同样的错误。

#include <gtk/gtk.h>
#include <glib-object.h>
#include <string.h>
#include <libxfce4util/libxfce4util.h>
#include <libxfce4panel/xfce-panel-plugin.h>
#include <libxfce4panel/xfce-hvbox.h>

#include "example_dat.h" /* contains all structures */
#include "example_func.h" /* contains all function prototypes used in this program */
#include "example_images.h"
#include "example.c"
#include "example_processdata.c"
#include "example_menu.c"


/* register the xfce plugin */
XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL(example_applet_fill);

1 个答案:

答案 0 :(得分:2)

看起来我解决了这个问题。 xfce的构建过程与我用于构建gnome面板小程序的过程略有不同。

对于gnome applet,我使用一个源文件来包含所有其他源文件和头文件。

在xfce中,在查看了各种插件源树之后,每个源文件都包含必要的头文件,但是没有源文件包含其他源文件。

修复是根本不包含任何其他源文件,并更改每个源文件以包含头文件。