Re: hpux linking shared library with static library
Thank you! But I do link the static library as PIC. Attached is a sample. When I remove the restriction all works, shared can call static, main can call both. --- $ ldd xxx/bin/test1 = /usr/lib/libc.2 = /usr/lib/libc.2 /usr/lib/libdld.2 =/usr/lib/libdld.2 /usr/lib/libc.2 = /usr/lib/libc.2 /tmp/alon/test-1/xxx/lib/libb.sl = /tmp/alon/test-1/xxx/lib/libb.sl /usr/lib/libc.2 = /usr/lib/libc.2 $ xxx/bin/test1 --- --- AUTOMAKE_OPTIONS = foreign 1.10 ACLOCAL_AMFLAGS = -I m4 noinst_LTLIBRARIES = liba.la lib_LTLIBRARIES = libb.la bin_PROGRAMS = test1 liba_la_SOURCES = a.c liba_la_CFLAGS = $(AM_CFLAGS) -prefer-pic liba_la_LDFLAGS= $(AM_LDFLAGS) -rpath $(libdir) -static libb_la_SOURCES = b.c libb.exports libb_la_LIBADD = liba.la libb_la_LDFLAGS = $(AM_LDFLAGS) \ -avoid-version -no-undefined \ -export-symbols $(srcdir)/libb.exports test1_SOURCES = c.c test1_LDADD = libb.la --- On Tue, Jul 13, 2010 at 7:30 PM, Robert Boehne rboe...@gmail.com wrote: When your shared library links, that doesn't mean it will work. You would need to run a program with it, that uses symbols in the archive you've attempted to link to your shared library. IIRC, HPUX will generate non-pic by default and your link may not be resolving anything in the static archive. On Tue, Jul 13, 2010 at 11:09 AM, Alon Bar-Lev alon.bar...@gmail.com wrote: Hello, When I try to link shared library with static library on hpux I get the following message: *** Warning: This system can not link to static lib archive libcore.la. *** I have the capability to make that library automatically link in when *** you link to this library. But I can only do this if you have a *** shared version of the library, which you do not appear to have. *** But as you try to build a module library, libtool will still create *** a static module, that should work as long as the dlopening application *** is linked with the -dlopen flag to resolve symbols at runtime. However if I change libtool: -deplibs_check_method=file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library +deplibs_check_method=pass_all It succeed in linking. Any reason why this is forbidden in hpux? $ uname -a HP-UX hpux1 B.11.11 U 9000/800 1528720528 unlimited-user license Regards, Alon Bar-Lev. ___ http://lists.gnu.org/mailman/listinfo/libtool test.tar.gz Description: GNU Zip compressed data ___ http://lists.gnu.org/mailman/listinfo/libtool
Re: hpux linking shared library with static library
Libtool is intended to support a portable subset of shared library functionality. When you use an archive file to create a shared library, this is generally not a portable feature, and won't work on many systems (like Windows). In this situation, you will be better off creating a shared library of the archive you want to link in, or expanding it into it's object files and linking them directly (like a Libtool convenience library). But whatever you may do, if you get an archive that isn't pic, it won't work, and because the one advantage to static archives is that they don't have to be pic (and may run a little faster) most of them are created from object files that are not pic. HTH, Rob On Wed, Jul 14, 2010 at 2:47 AM, Alon Bar-Lev alon.bar...@gmail.com wrote: Thank you! But I do link the static library as PIC. Attached is a sample. When I remove the restriction all works, shared can call static, main can call both. --- $ ldd xxx/bin/test1 = /usr/lib/libc.2 = /usr/lib/libc.2 /usr/lib/libdld.2 =/usr/lib/libdld.2 /usr/lib/libc.2 = /usr/lib/libc.2 /tmp/alon/test-1/xxx/lib/libb.sl = /tmp/alon/test-1/xxx/lib/ libb.sl /usr/lib/libc.2 = /usr/lib/libc.2 $ xxx/bin/test1 --- --- AUTOMAKE_OPTIONS = foreign 1.10 ACLOCAL_AMFLAGS = -I m4 noinst_LTLIBRARIES = liba.la lib_LTLIBRARIES = libb.la bin_PROGRAMS = test1 liba_la_SOURCES = a.c liba_la_CFLAGS = $(AM_CFLAGS) -prefer-pic liba_la_LDFLAGS= $(AM_LDFLAGS) -rpath $(libdir) -static libb_la_SOURCES = b.c libb.exports libb_la_LIBADD = liba.la libb_la_LDFLAGS = $(AM_LDFLAGS) \ -avoid-version -no-undefined \ -export-symbols $(srcdir)/libb.exports test1_SOURCES = c.c test1_LDADD = libb.la --- On Tue, Jul 13, 2010 at 7:30 PM, Robert Boehne rboe...@gmail.com wrote: When your shared library links, that doesn't mean it will work. You would need to run a program with it, that uses symbols in the archive you've attempted to link to your shared library. IIRC, HPUX will generate non-pic by default and your link may not be resolving anything in the static archive. On Tue, Jul 13, 2010 at 11:09 AM, Alon Bar-Lev alon.bar...@gmail.com wrote: Hello, When I try to link shared library with static library on hpux I get the following message: *** Warning: This system can not link to static lib archive libcore.la. *** I have the capability to make that library automatically link in when *** you link to this library. But I can only do this if you have a *** shared version of the library, which you do not appear to have. *** But as you try to build a module library, libtool will still create *** a static module, that should work as long as the dlopening application *** is linked with the -dlopen flag to resolve symbols at runtime. However if I change libtool: -deplibs_check_method=file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library +deplibs_check_method=pass_all It succeed in linking. Any reason why this is forbidden in hpux? $ uname -a HP-UX hpux1 B.11.11 U 9000/800 1528720528 unlimited-user license Regards, Alon Bar-Lev. ___ http://lists.gnu.org/mailman/listinfo/libtool ___ http://lists.gnu.org/mailman/listinfo/libtool
Re: hpux linking shared library with static library
On Wed, 14 Jul 2010, Alon Bar-Lev wrote: Thank you! But I do link the static library as PIC. Even if the static library is PIC, and the OS is happy to load and run the result, there is a common problem with this approach since if more than one shared library is linked with the static library, and these two shared libraries are used in the same program, there are likely to be duplicate symbol conficts or semi-random operation. The problem becomes worse if multiple versions of the static library were used. Bob -- Bob Friesenhahn bfrie...@simple.dallas.tx.us, http://www.simplesystems.org/users/bfriesen/ GraphicsMagick Maintainer,http://www.GraphicsMagick.org/___ http://lists.gnu.org/mailman/listinfo/libtool
Re: hpux linking shared library with static library
Hello Robert, This argument is correct, however it is true for all platforms, while this already works using libtool in: - Windows 32bit - Windows 64bit - Solaris 8 - Solaris 10 sparc - Solaris 10 intel - AIX 5.3 - AIX 6.1 - Linux 2.2 i386 - Linux 2.4 i386 - Linux 2.6 i686 - Linux 2.6 x86_64 - Linux 2.6 ppc - Linux 2.6 s390 Something must be different in hpux configuration, while it can behave like any other OS, libtool enforces something else. Thanks, Alon. On Wed, Jul 14, 2010 at 7:20 PM, Robert Boehne rboe...@gmail.com wrote: Libtool is intended to support a portable subset of shared library functionality. When you use an archive file to create a shared library, this is generally not a portable feature, and won't work on many systems (like Windows). In this situation, you will be better off creating a shared library of the archive you want to link in, or expanding it into it's object files and linking them directly (like a Libtool convenience library). But whatever you may do, if you get an archive that isn't pic, it won't work, and because the one advantage to static archives is that they don't have to be pic (and may run a little faster) most of them are created from object files that are not pic. HTH, Rob On Wed, Jul 14, 2010 at 2:47 AM, Alon Bar-Lev alon.bar...@gmail.com wrote: Thank you! But I do link the static library as PIC. Attached is a sample. When I remove the restriction all works, shared can call static, main can call both. --- $ ldd xxx/bin/test1 = /usr/lib/libc.2 = /usr/lib/libc.2 /usr/lib/libdld.2 = /usr/lib/libdld.2 /usr/lib/libc.2 = /usr/lib/libc.2 /tmp/alon/test-1/xxx/lib/libb.sl = /tmp/alon/test-1/xxx/lib/libb.sl /usr/lib/libc.2 = /usr/lib/libc.2 $ xxx/bin/test1 --- --- AUTOMAKE_OPTIONS = foreign 1.10 ACLOCAL_AMFLAGS = -I m4 noinst_LTLIBRARIES = liba.la lib_LTLIBRARIES = libb.la bin_PROGRAMS = test1 liba_la_SOURCES = a.c liba_la_CFLAGS = $(AM_CFLAGS) -prefer-pic liba_la_LDFLAGS= $(AM_LDFLAGS) -rpath $(libdir) -static libb_la_SOURCES = b.c libb.exports libb_la_LIBADD = liba.la libb_la_LDFLAGS = $(AM_LDFLAGS) \ -avoid-version -no-undefined \ -export-symbols $(srcdir)/libb.exports test1_SOURCES = c.c test1_LDADD = libb.la --- On Tue, Jul 13, 2010 at 7:30 PM, Robert Boehne rboe...@gmail.com wrote: When your shared library links, that doesn't mean it will work. You would need to run a program with it, that uses symbols in the archive you've attempted to link to your shared library. IIRC, HPUX will generate non-pic by default and your link may not be resolving anything in the static archive. On Tue, Jul 13, 2010 at 11:09 AM, Alon Bar-Lev alon.bar...@gmail.com wrote: Hello, When I try to link shared library with static library on hpux I get the following message: *** Warning: This system can not link to static lib archive libcore.la. *** I have the capability to make that library automatically link in when *** you link to this library. But I can only do this if you have a *** shared version of the library, which you do not appear to have. *** But as you try to build a module library, libtool will still create *** a static module, that should work as long as the dlopening application *** is linked with the -dlopen flag to resolve symbols at runtime. However if I change libtool: -deplibs_check_method=file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library +deplibs_check_method=pass_all It succeed in linking. Any reason why this is forbidden in hpux? $ uname -a HP-UX hpux1 B.11.11 U 9000/800 1528720528 unlimited-user license Regards, Alon Bar-Lev. ___ http://lists.gnu.org/mailman/listinfo/libtool ___ http://lists.gnu.org/mailman/listinfo/libtool
Re: hpux linking shared library with static library
On Wed, Jul 14, 2010 at 10:21 PM, Bob Friesenhahn bfrie...@simple.dallas.tx.us wrote: On Wed, 14 Jul 2010, Alon Bar-Lev wrote: Thank you! But I do link the static library as PIC. Even if the static library is PIC, and the OS is happy to load and run the result, there is a common problem with this approach since if more than one shared library is linked with the static library, and these two shared libraries are used in the same program, there are likely to be duplicate symbol conficts or semi-random operation. The problem becomes worse if multiple versions of the static library were used. Bob Hello Bob, Yes, I know, we already gone though this argument before and I Ralph helped me with the hack -rpath $(libdir) [1]. This argument is good for best practice design, but there are cases in which the shared library should be with minimum dependencies, I explained all at thread [2], it should be my decision to make. Now, this already works using libtool in: - Windows 32bit - Windows 64bit - Solaris 8 - Solaris 10 sparc - Solaris 10 intel - AIX 5.3 - AIX 6.1 - Linux 2.2 i386 - Linux 2.4 i386 - Linux 2.6 i686 - Linux 2.6 x86_64 - Linux 2.6 ppc - Linux 2.6 s390 So something must be different in hpux configuration, while it can behave like any other OS, libtool enforces something else. Alon. [1] http://www.mail-archive.com/libtool@gnu.org/msg11805.html [2] http://www.mail-archive.com/libtool@gnu.org/msg11804.html ___ http://lists.gnu.org/mailman/listinfo/libtool
Re: hpux linking shared library with static library
When your shared library links, that doesn't mean it will work. You would need to run a program with it, that uses symbols in the archive you've attempted to link to your shared library. IIRC, HPUX will generate non-pic by default and your link may not be resolving anything in the static archive. On Tue, Jul 13, 2010 at 11:09 AM, Alon Bar-Lev alon.bar...@gmail.comwrote: Hello, When I try to link shared library with static library on hpux I get the following message: *** Warning: This system can not link to static lib archive libcore.la. *** I have the capability to make that library automatically link in when *** you link to this library. But I can only do this if you have a *** shared version of the library, which you do not appear to have. *** But as you try to build a module library, libtool will still create *** a static module, that should work as long as the dlopening application *** is linked with the -dlopen flag to resolve symbols at runtime. However if I change libtool: -deplibs_check_method=file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library +deplibs_check_method=pass_all It succeed in linking. Any reason why this is forbidden in hpux? $ uname -a HP-UX hpux1 B.11.11 U 9000/800 1528720528 unlimited-user license Regards, Alon Bar-Lev. ___ http://lists.gnu.org/mailman/listinfo/libtool ___ http://lists.gnu.org/mailman/listinfo/libtool