2013-05-30 40 views
0

我正在將gnome面板小程序轉換爲xfce面板插件。到目前爲止,我已經刪除了源代碼中的幾個gnome特定部分,並根據需要將其替換爲xfce特定的源代碼。編譯XFCE4面板插件

我使用模板(例如weather插件和示例插件)創建了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和麪板插件/ Makefile.am需要哪些XFCE4 XDT-autgen工具,當源目錄中運行會生成適當的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 <[email protected]>]) 
AC_INIT([xfce4-my_example-plugin], [my_example_version()], [[email protected]]) 
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 

@[email protected] 

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

看起來我解決了這個問題。 xfce的構建過程與我用來構建gnome面板小程序的構建過程略有不同。

對於gnome小程序,我使用一個源文件來包含所有其他源文件和頭文件。

在xfce中,在查看了各種插件源代碼樹之後,每個源文件都包含必要的頭文件,但是沒有一個源文件包含其他源文件。

修正是根本不包含任何其他源文件,並更改每個源文件以包含頭文件。