Keith Kyzivat
2008-Jan-04 10:42 UTC
[Speex-dev] PIC issues... Linking statically to speex when generating a shared library..
The short: Linking to libspeex.a when generating a .so using libtool
results in a non-portability warning. This is due to PIC code and non-PIC
code intermingling.
How can I go about fixing this whilst still using an installed libspeex
present on the user's system?
The long:
I am using autoconf + libtool to generate a codec plugin for speex
(sipXmediaLib), and I'm trying to eliminate the libspeex.so shared library
dependency -- I'd like to have it all in one package - so all that is needed
is to drop a single plugin that is then dlopened by our application to
supply support for the speex codec (and other codecs too, but that
conversation doesn't belong here).
Here's how I link statically to libspeex now in the plugin's Makefile.am
--
which intermingles PIC code (the non-library source in the new shared
library) and position dependent code (libspeex.a):
codec_speex_la_SOURCES = PlgSpeex.c speex_nb.c speex_uwb.c speex_wb.c
codec_speex_la_LIBADD = @SPEEX_ROOT@/libspeex/.libs/libspeex.a
codec_speex_la_LDFLAGS = -module -avoid-version
(which, I just spotted, will not be correct for installed versions of speex
-- only ones we build -- since installed versions will not have the .a in a
.lib directory -- but in any case, it should illustrate things well enough)
This generates the warning from libtool:
*** Warning: Linking the shared library codec_speex.la against the
*** static library
../../../../../sipXmediaLib/contrib/libspeex/libspeex/.libs/libspeex.a is
not portable!
It seems this is a problem for a lot of projects..
Is there a way to do this portably?
Is there a good reason that speex (and many other projects) build static
libraries with position dependent code and not PIC? (Given that I have
never seen this done, I'm guessing there must be a good reason)
--
Keith Kyzivat
SIPez LLC.
SIP VoIP, IM and Presence Consulting
http://www.SIPez.com
tel: +1 (617) 273-4000
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
http://lists.xiph.org/pipermail/speex-dev/attachments/20080104/ca23ca9e/attachment.htm
Jean-Marc Valin
2008-Jan-06 01:35 UTC
[Speex-dev] PIC issues... Linking statically to speex when generating a shared library..
Try adding '-fPIC -DPIC' to the CFLAGS environment variable (don't forget to set the optimisations and everything else if you do that). Jean-Marc Keith Kyzivat a ?crit :> The short: Linking to libspeex.a when generating a .so using libtool > results in a non-portability warning. This is due to PIC code and non-PIC > code intermingling. > How can I go about fixing this whilst still using an installed libspeex > present on the user's system? > > > The long: > I am using autoconf + libtool to generate a codec plugin for speex > (sipXmediaLib), and I'm trying to eliminate the libspeex.so shared library > dependency -- I'd like to have it all in one package - so all that is needed > is to drop a single plugin that is then dlopened by our application to > supply support for the speex codec (and other codecs too, but that > conversation doesn't belong here). > > Here's how I link statically to libspeex now in the plugin's Makefile.am -- > which intermingles PIC code (the non-library source in the new shared > library) and position dependent code (libspeex.a): > codec_speex_la_SOURCES = PlgSpeex.c speex_nb.c speex_uwb.c speex_wb.c > codec_speex_la_LIBADD = @SPEEX_ROOT@/libspeex/.libs/libspeex.a > codec_speex_la_LDFLAGS = -module -avoid-version > > (which, I just spotted, will not be correct for installed versions of speex > -- only ones we build -- since installed versions will not have the .a in a > .lib directory -- but in any case, it should illustrate things well enough) > > This generates the warning from libtool: > *** Warning: Linking the shared library codec_speex.la against the > *** static library > ../../../../../sipXmediaLib/contrib/libspeex/libspeex/.libs/libspeex.a is > not portable! > > It seems this is a problem for a lot of projects.. > > Is there a way to do this portably? > Is there a good reason that speex (and many other projects) build static > libraries with position dependent code and not PIC? (Given that I have > never seen this done, I'm guessing there must be a good reason) > > > > ------------------------------------------------------------------------ > > _______________________________________________ > Speex-dev mailing list > Speex-dev@xiph.org > http://lists.xiph.org/mailman/listinfo/speex-dev