[Geany-devel] [pretty-print plugin] Failed to compile geany-plugins with latest geany

Eugene Arshinov earshinov at xxxxx
Sat Sep 12 09:02:10 UTC 2009


Hi Cedric.

It is common to accept little code duplication and just write

in ConfigUI.h:
  extern PrettyPrintingOptions* prettyPrintingOptions;

in ConfigUI.c:
  #include "ConfigUi.h"
  PrettyPrintingOptions* prettyPrintingOptions;

This way is more straightforward and obvious.


On Sat, 12 Sep 2009 10:54:51 +0200
Cédric Tabin <tabin.cedric at gmail.com> wrote:

> Hi Eugene,
> 
> Thanks for your explanations :-) That's important to me to
> understand  how it works !
> Can you tell me if it is the good way to solve this like that :
> 
> in ConfigUI.h
> 
> #ifndef PP_CONFIG_UI_PPOPTIONS
>     extern
> #endif
> 
> PrettyPrintingOptions* prettyPrintingOptions;
> 
> 
> in ConfigUI.c
> 
> #define PP_CONFIG_UI_PPOPTIONS
> #include "ConfigUI.h"
> 
> Seems to work on my computer !
> 
> Regards,
> Cedric
> 
> On Sat, Sep 12, 2009 at 10:45 AM, Eugene Arshinov
> <earshinov at gmail.com>wrote:
> 
> > Hi.
> >
> > No, that was me who missed something... I did not check whether the
> > changes I suggested work...
> >
> > So, let me explain a bit how to use extern. Declaration using
> > extern if only _declaration_, not definition. Extern says that you
> > define prettyPrintingOptions somewhere within your plugin and let
> > *.c files which include ConfigUI.h to discover that. But, you must
> > actually _define_ prettyPluginOptions in any *.c file.
> >
> > The error I discovered was that _two_ *.c files included
> > _definition_ of prettyPrintingOptions, so linker reported that it
> > was defined twice. Without -fno-common linker discoveres double
> > definition and leave only one of those. This behavior is
> > non-standard, so I recommend using -fno-common.
> >
> > Summary:
> >  - put extern where I suggested
> >  - additionally, put original definition (without extern) in
> >    PluginEntry.c (or another source file)
> >
> > Sorry for inconvenience, and long answer...
> >
> > On Sat, 12 Sep 2009 10:21:20 +0200
> > Cédric Tabin <tabin.cedric at gmail.com> wrote:
> >
> > > Hello,
> > >
> > > If I put 'extern' in ConfigUI.h, geany cannot load my plugin :
> > >
> > > Can't load plugin: /usr/local/lib/geany/pretty-print.so: undefined
> > > symbol: prettyPrintingOptions
> > >
> > > Do I miss something somewhere ?
> > >
> > > Regards,
> > > Cedric
> > >
> > > On Sat, Sep 12, 2009 at 10:04 AM, Eugene Arshinov
> > > <earshinov at gmail.com>wrote:
> > >
> > > > Hi.
> > > >
> > > > Just declare prettyPrintingOptions as extern in ConfigUI.h:
> > > >
> > > >  extern PrettyPrintingOptions* prettyPrintingOptions;
> > > >
> > > > The error is caused by -fno-common GCC option which is in my
> > > > CFLAGS. Usually, in header files you should declare all
> > > > variables as extern.
> > > >
> > > > Best regards,
> > > > Eugene.
> > > >
> > > > On Sat, 12 Sep 2009 09:48:33 +0200
> > > > Cédric Tabin <tabin.cedric at gmail.com> wrote:
> > > >
> > > > > Hello,
> > > > >
> > > > > Strange... I tried again and again on my gentoo and it
> > > > > compiles well. Does anyone have that kind of problem ? Maybe
> > > > > my headers are wrong (I use the variable prettyPrinterOptions
> > > > > into PluginEntry.c that is defined into ConfigUI.h). I a boss
> > > > > of C can just take a lool :-)
> > > > >
> > > > > Regards,
> > > > > Cedric
> > > > >
> > > > > On Sat, Sep 12, 2009 at 8:54 AM, Eugene Arshinov
> > > > > <earshinov at gmail.com>wrote:
> > > > >
> > > > > > Hi all.
> > > > > >
> > > > > > I can't compile geany-plugins since r918 ("Pretty-print :
> > > > > > Doctype supporte added, bugfix on cdata processing") with
> > > > > > latest geany (r4176).
> > > > > >
> > > > > > I installed geany with
> > > > > >
> > > > > > $ make uninstall && make clean && ./autogen.sh && make &&
> > > > > > sudo make install
> > > > > >
> > > > > > and was trying to build geany-plugins
> > > > > >
> > > > > > $ aclocal && ./autogen.sh && make
> > > > > >
> > > > > > but it failed:
> > > > > >
> > > > > > ...
> > > > > > libtool: link: gcc
> > > > > > -shared  .libs/pretty_print_la-PluginEntry.o .libs/pretty_print_la-PrettyPrinter.o
> > .libs/pretty_print_la-ConfigUI.o
> > > > > > -L/usr/local/lib /usr/lib/libgtk-x11-2.0.so /usr/lib/
> > > > libgdk-x11-2.0.so/usr/lib/
> > > > > > libatk-1.0.so /usr/lib/
> > libpangoft2-1.0.so/usr/lib/libgdk_pixbuf-2.0.so-lm /usr/lib/
> > > > > > libpangocairo-1.0.so /usr/lib/libgio-2.0.so /usr/lib/libcairo.so
> > > > /usr/lib/
> > > > > > libpango-1.0.so /usr/lib/libfreetype.so -lz
> > > > > > -lfontconfig /usr/lib/
> > > > > > libgobject-2.0.so /usr/lib/libgmodule-2.0.so /usr/lib/
> > > > libglib-2.0.so/usr/lib/libxml2.so
> > > > > > -march=pentium4   -Wl,-soname -Wl,pretty-print.so
> > > > > > -o .libs/pretty-print.so
> > .libs/pretty_print_la-ConfigUI.o:(.bss+0x0):
> > > > > > multiple definition of `prettyPrintingOptions'
> > > > > > .libs/pretty_print_la-PluginEntry.o:(.bss+0x0): first
> > > > > > defined here ...
> > > > > >
> > > > > > Can anyone reproduce it?
> > > > > >
> > > > > > Best regards,
> > > > > > Eugene.
> > > > > > _______________________________________________
> > > > > > Geany-devel mailing list
> > > > > > Geany-devel at uvena.de
> > > > > > http://lists.uvena.de/cgi-bin/mailman/listinfo/geany-devel
> > > > > >
> > > > _______________________________________________
> > > > Geany-devel mailing list
> > > > Geany-devel at uvena.de
> > > > http://lists.uvena.de/cgi-bin/mailman/listinfo/geany-devel
> > > >
> > _______________________________________________
> > Geany-devel mailing list
> > Geany-devel at uvena.de
> > http://lists.uvena.de/cgi-bin/mailman/listinfo/geany-devel
> >



More information about the Devel mailing list