Re: hpux linking shared library with static library

2010-07-14 Thread Alon Bar-Lev
‎‎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

2010-07-14 Thread Robert Boehne
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

2010-07-14 Thread Bob Friesenhahn

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

2010-07-14 Thread Alon Bar-Lev
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

2010-07-14 Thread Alon Bar-Lev
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

2010-07-13 Thread Robert Boehne
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