Subject: Subordinate libltdl builds convenience library when it should build shared library

From: Bob Friesenhahn <[email-masked]>
Date: Tue, 9 Oct 2012 21:31:02 -0500 (CDT)

GraphicsMagick builds libltdl non-recursively as a subordinate 
component by including its Makefile.inc and using the ${LIBLTDL} and 
${LTDLDEPS} values it produces in the configure script.

Ltdl is configured like

LT_CONFIG_LTDL_DIR([ltdl])
LTDL_INIT([convenience nonrecursive])

Today while testing with the IBM XLC compiler on an AIX machine which 
does not have libltdl installed, I noticed that GraphicsMagick was 
unable to link, with this error:

1586-281 (E) A type mismatch was detected for symbol "dlopen_LTX_get_vtable".

This issue is noticed with and without the --enable-ltdl-install 
option supplied.  The --enable-ltdl-convenience option was not 
supplied.

I noticed that all of the libltdl objects are being included into my 
library at link time and that libltdl symbols are being included my 
library's .exp exports file.  This is in spite of requesting that the 
libltdl library be built and installed.

It seems that libltdl was built as a static library rather than a 
shared library and it is being used as a convenience library 
(libltdlc.a) rather than being used as a (to be installed) shared 
library dependency as it should be.

The build was configured with

   --enable-shared --disable-static --enable-ltdl-install

so it seems that libltdl should have been built as a shared library.

Here is relevant configure output:

checking how to hardcode library paths into programs... immediate
checking for shl_load... no
checking for shl_load in -ldld... no
checking for dlopen... yes
checking whether a program can dlopen itself... yes
checking whether a statically linked program can dlopen itself... yes
checking whether stripping libraries is possible... no
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking whether we are using the GNU C++ compiler... no
checking whether xlC_r accepts -g... yes
checking dependency style of xlC_r... xlc
checking how to run the C++ preprocessor... xlC_r -E
checking whether the xlC_r linker (/bin/ld) supports shared libraries... yes
checking for xlC_r option to produce PIC...  -DPIC
checking if xlC_r PIC flag  -DPIC works... yes
checking if xlC_r static flag -bnso -bI:/lib/syscalls.exp works... no
checking if xlC_r supports -c -o file.o... yes
checking if xlC_r supports -c -o file.o... (cached) yes
checking whether the xlC_r linker (/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... aix7.1.0.0 ld.so
checking how to hardcode library paths into programs... immediate
checking which extension is used for runtime loadable modules... .so
checking which variable specifies run-time module search path... LIBPATH
checking for the default library search path... /lib /usr/lib
checking for library containing dlopen... none required
checking for dlerror... yes
checking for shl_load... (cached) no
checking for shl_load in -ldld... (cached) no
checking for dld_link in -ldld... no
checking for _ prefix in compiled symbols... no
checking whether deplibs are loaded by dlopen... yes
checking for argz.h... no
checking for error_t... no
checking for argz_add... no
checking for argz_append... no
checking for argz_count... no
checking for argz_create_sep... no
checking for argz_insert... no
checking for argz_next... no
checking for argz_stringify... no
checking whether libtool supports -dlopen/-dlpreopen... yes
checking for ltdl.h... no
checking where to find libltdl headers... -I${top_srcdir}/ltdl
checking where to find libltdl library... ${top_build_prefix}ltdl/libltdlc.la

Bob
-- 
Bob Friesenhahn
[email-masked], http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer,    http://www.GraphicsMagick.org/