编译 XFCE4 面板插件

标签 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 

我在下面粘贴了 xfce4 xdt-autogen 工具所需的 Makefile.am、configure.ac 和 panel-plugin/Makefile.am,当在源目录中运行时,它将生成适当的 make 和配置文件。

***************
* 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 相关更改之前编译良好。

生成文件.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);

最佳答案

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

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

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

解决方法是根本不包含任何其他源文件,而是更改每个源文件以包含头文件。

关于编译 XFCE4 面板插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16847759/

相关文章:

转换 IP 以进行反向 ip 查找

c - SDL 音频 channel 未按要求运行

linux - Firefox 不打开来自外部来源的链接(例如单击 Skype 中的链接)

linux - 如何检查文件是否在 Linux 中打开和/或正在编辑

ubuntu - 如何使用 xrdp 在 ubuntu 中重用 session

c++ - intptr_t中_t的含义

c - 我给 C 文件起什么名字重要吗?

linux - 我正在使用触摸在我桌面上的文件夹中创建一个文件...当我尝试这个时它说找不到命令

linux - Debian APT 无法安装任何软件包

c++ - eclipse变量悬停中的Debian XFCE黑色背景