Now that my app is ready to be released, I would like to move to the
shared library instead of the static. However, using the confuse-2.3
tarball, I am unable to create shared libraries. I generated two
source trees, one set up for shared (using ./configure
--enable-shared) and one without (using just ./configure). The
output from configure is different for each:
address@hidden:/tmp/confuse> diff configure-noshared-out
configure-shared-out
82a83
> checking whether -lc should be explicitly linked in... no
87c88
< checking whether to build shared libraries... no
---
> checking whether to build shared libraries... yes
But the Makefiles all the way through are identical:
address@hidden:/tmp/confuse> ls
configure-noshared-out configure-shared-out confuse-2.3
confuse-2.3.shared
address@hidden:/tmp/confuse> diff confuse-2.3/Makefile
confuse-2.3.shared/Makefile
address@hidden:/tmp/confuse> diff confuse-2.3/src/Makefile
confuse-2.3.shared/src/Makefile address@hidden:/tmp/confuse> diff
confuse-2.3/po/Makefile confuse-2.3.shared/po/Makefile
address@hidden:/tmp/confuse> diff confuse-2.3/m4/Makefile
confuse-2.3.shared/m4/Makefile
and no .so is built anywhere in the shared.
So then a friend suggested that I disable the static and just enable
shared, so I did a:
./configure --disable-static --enable-shared
in a freshly unpacked tree which did result in different Makefiles
(at least src/Makefile - which was the only one I checked), but the
make subsequently failed in the examples subdirectory but not before
it didn't build the .so, see output:
address@hidden:/tmp/confuse/confuse-2.3.shared> make
make all-recursive
make[1]: Entering directory `/tmp/confuse/confuse-2.3.shared'
Making all in m4
make[2]: Entering directory `/tmp/confuse/confuse-2.3.shared/m4'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/tmp/confuse/confuse-2.3.shared/m4'
Making all in po
make[2]: Entering directory `/tmp/confuse/confuse-2.3.shared/po'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/tmp/confuse/confuse-2.3.shared/po'
Making all in src
make[2]: Entering directory `/tmp/confuse/confuse-2.3.shared/src'
if /bin/sh ../libtool --mode=compile gcc
-DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I. -I..
-g -O2 -MT confuse.lo -MD -MP -MF ".deps/confuse.Tpo" -c -o
confuse.lo confuse.c; \
then mv -f ".deps/confuse.Tpo" ".deps/confuse.Plo"; else rm -f
".deps/confuse.Tpo"; exit 1; fi
gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I.
-I.. -g -O2 -MT confuse.lo -MD -MP -MF .deps/confuse.Tpo -c confuse.c
-fPIC -DPIC -DPIC -o confuse.o
mv -f confuse.o confuse.lo
if /bin/sh ../libtool --mode=compile gcc
-DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I. -I..
-g -O2 -MT lexer.lo -MD -MP -MF ".deps/lexer.Tpo" -c -o lexer.lo
lexer.c; \
then mv -f ".deps/lexer.Tpo" ".deps/lexer.Plo"; else rm -f
".deps/lexer.Tpo"; exit 1; fi
gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I.
-I.. -g -O2 -MT lexer.lo -MD -MP -MF .deps/lexer.Tpo -c lexer.c
-fPIC -DPIC -DPIC -o lexer.o
mv -f lexer.o lexer.lo
/bin/sh ../libtool --mode=link gcc -g -O2 -o libconfuse.la -rpath
/usr/local/lib confuse.lo lexer.lo mkdir .libs
rm -fr .libs/libconfuse.la .libs/libconfuse.* .libs/libconfuse.*
(cd . && ln -s confuse.lo confuse.o)
(cd . && ln -s lexer.lo lexer.o)
gcc -shared confuse.lo lexer.lo -Wl,-soname -Wl,libconfuse.0 -o
.libs/libconfuse.0.0.0
(cd .libs && rm -f libconfuse.0 && ln -s libconfuse.0.0.0
libconfuse.0)
(cd .libs && rm -f libconfuse && ln -s libconfuse.0.0.0 libconfuse)
creating libconfuse.la
(cd .libs && rm -f libconfuse.la && ln -s ../libconfuse.la
libconfuse.la)
make[2]: Leaving directory `/tmp/confuse/confuse-2.3.shared/src'
Making all in examples
make[2]: Entering directory `/tmp/confuse/confuse-2.3.shared/examples'
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../src -g -O2 -MT cfgtest.o
-MD -MP -MF ".deps/cfgtest.Tpo" -c -o cfgtest.o cfgtest.c; \
then mv -f ".deps/cfgtest.Tpo" ".deps/cfgtest.Po"; else rm -f
".deps/cfgtest.Tpo"; exit 1; fi
make[2]: *** No rule to make target `../src/.libs/libconfuse.a',
needed by `cfgtest'. Stop.
make[2]: Leaving directory `/tmp/confuse/confuse-2.3.shared/examples'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/confuse/confuse-2.3.shared'
make: *** [all] Error 2
address@hidden:/tmp/confuse/confuse-2.3.shared> find -name "lib*"
./m4/lib-link.m4
./m4/lib-ld.m4
./m4/lib-prefix.m4
./src/.libs/libconfuse.0
./src/.libs/libconfuse
./src/.libs/libconfuse.lai
./src/.libs/libconfuse.0.0.0
./src/.libs/libconfuse.la
./src/libconfuse.la
./libtool
./libconfuse.spec
./libconfuse.spec.in
./windows/msvc6/libConfuse
./windows/msvc6/libConfuse/libConfuse.dsp
./windows/msvc6/libConfuse/libConfuse.dsw
./windows/msvs.net/libConfuse
./windows/msvs.net/libConfuse/libConfuse.vcproj
./windows/devcpp/libConfuse.dev
./windows/borland/libConfuse.bpf
./windows/borland/libConfuse.bpr
So, any help appreciated, I am using autoconf-2.57-142 if it matters.
Thanks!
Brett