[syslog-ng] linking changes

Corinna Vinschen vinschen at redhat.com
Wed Feb 23 15:18:23 CET 2011


On Feb 23 14:52, Balazs Scheidler wrote:
> On Wed, 2011-02-23 at 14:31 +0100, Corinna Vinschen wrote:
> > On Feb 23 14:11, Balazs Scheidler wrote:
> > > Am I missing something else?
> > 
> > Well, yes.  As outlined in
> > https://lists.balabit.hu/pipermail/syslog-ng/2011-February/016006.html
> > there are two problems:
> > 
> > - You can't link against a static lib when creating a shared lib.  That
> >   means, creating libdbparser.so will fail.  My patch results in
> >   creating a shared libsyslog-ng-patterndb.so for linking libdbparser.so,
> >   and a static libsyslog-ng-patterndb.a for linking pdbtool.
> >   Marking both libsyslog-ng-patterndb as noinst is just to avoid that
> >   both convenience libs are installed.
> 
> hmm.. not even with -fPIC ? If I have to duplicate executable code into
> pdbtool anyway (because of static linking it), I'd rather not have a
> separate .so which is only loaded by an .so.

-fPIC and -fpic have no effect on Windows.  The Windows loader doesn't
support position independent code.  So, no, it won't work either.

> If that's the case, I'd include the same source files into both targets
> (the .la one and pdbtool one)
> 
> > 
> > - The link order is important when creating binaries on the Windows
> >   platform.  Since libsyslog-ng-patterndb.a reference symbols in
> >   ../../lib/libsyslog-ng.la, you must reorder them on the command line.
> >   Not
> > 
> >     ../../lib/libsyslog-ng.la libsyslog-ng-patterndb.a
> > 
> >   but
> >   
> >     libsyslog-ng-patterndb.a ../../lib/libsyslog-ng.la
> 
> Ok, I've missed that, and changed my Makefile.
> 
> > 
> > My patch fixes both problems.  The result should work on all platforms.
> 
> Thanks for your efforts, and sorry for missing the point. Hopefully we
> can close this once and for all :)

No worries.  However, something else occured to me a couple of minutes
ago.  If you apply my patch, you must change

  noinst_LTLIBRARIES = libsyslog-ng-patterndb.la

to

  lib_LTLIBRARIES = libsyslog-ng-patterndb.la

If you keep it in noinst_LTLIBRARIES, the libdbparse.so module will be
broken after installtion because it requires libsyslog-ng-patterndb.so
to run.  Sorry for forgetting that.

There are two ways to fix this.

- Move libsyslog-ng-patterndb.so to module_LTLIBRARIES and install it.

- Don't generate libsyslog-ng-patterndb.so.  Instead add the
  patterndb source files to libdbparser_la_SOURCES, along these lines:

diff --git a/modules/dbparser/Makefile.am b/modules/dbparser/Makefile.am
index b2ab700..f8a53f4 100644
--- a/modules/dbparser/Makefile.am
+++ b/modules/dbparser/Makefile.am
@@ -21,7 +21,8 @@ libsyslog_ng_patterndb_a_CFLAGS = $(AM_CFLAGS) -fPIC
 module_LTLIBRARIES = libdbparser.la
 libdbparser_la_SOURCES = \
 	dbparser.c dbparser.h \
-	dbparser-grammar.y dbparser-parser.c dbparser-parser.h dbparser-plugin.c
+	dbparser-grammar.y dbparser-parser.c dbparser-parser.h \
+	dbparser-plugin.c $(libsyslog_ng_patterndb_a_SOURCES)
 
 libdbparser_la_CPPFLAGS = $(AM_CPPFLAGS)
 libdbparser_la_LIBADD = ../../lib/libsyslog-ng.la libsyslog-ng-patterndb.a

I think this second solution is better.


Corinna

-- 
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat


More information about the syslog-ng mailing list