libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sr #105489] --whole-archive doesn't work on OSX


From: anonymous
Subject: [sr #105489] --whole-archive doesn't work on OSX
Date: Wed, 2 Aug 2006 01:21:12 +0000
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5

URL:
  <http://savannah.gnu.org/support/?func=detailitem&item_id=105489>

                 Summary: --whole-archive doesn't work on OSX
                 Project: GNU Libtool
            Submitted by: None
            Submitted on: Wednesday 08/02/2006 at 01:21 UTC
                Category: None
                Priority: 5 - Normal
                Severity: 3 - Normal
                  Status: None
                 Privacy: Public
             Assigned to: None
        Originator Email: address@hidden
             Open/Closed: Open
        Operating System: Mac OS

    _______________________________________________________

Details:

(apologies if this is the wrong place to file bugs, I could find the
bugtracker).

This bug tested on:
Darwin bioeng21.bioeng.auckland.ac.nz 8.7.0 Darwin Kernel Version 8.7.0: Fri
May 26 15:20:53 PDT 2006; root:xnu-792.6.76.obj~1/RELEASE_PPC Power Macintosh
powerpc

It seems that recent versions of libtool don't support the --whole-archive on
MacOSX. This causes the --whole-archive flag to be passed to gcc (which seems
to be silently ignored on OSX), resulting in a link which doesn't really
contain the whole archive.
For example:

/bin/sh ./libtool --tag=CXX --mode=link g++  -g -O2   -o cellml_corba_server
-lxml2 -lomniORB4 -lomnithread --whole-archive cellml_corba_server-Main.o
./libcellml_context.la ./libcellml_context_corba.la ./libcellml.la
./libcellml_corba.la ./libCORBASupport.la ./libltdlc.la
g++ -g -O2 -o .libs/cellml_corba_server --whole-archive
cellml_corba_server-Main.o -Wl,-bind_at_load  /usr/lib/libxml2.dylib
-lpthread -lz /usr/lib/libiconv.dylib -lm -lomniORB4 -lomnithread
./.libs/libcellml_context.dylib ./.libs/libcellml_context_corba.dylib
./.libs/libcellml.dylib ./.libs/libcellml_corba.dylib
./.libs/libCORBASupport.a ./.libs/libltdlc.a
creating cellml_corba_server

bioeng21:~/physiome_builds/trees/CellML_DOM_API_OSX cmiss$ nm
.libs/cellml_corba_server |grep gWrapperRepo
bioeng21:~/physiome_builds/trees/CellML_DOM_API_OSX cmiss$ nm
.libs/libCORBASupport.a |grep gWrapperRepo
000000ac t __GLOBAL__D__Z18gWrapperRepositoryv
00000000 a __GLOBAL__D__Z18gWrapperRepositoryv.eh
0000009c t __GLOBAL__I__Z18gWrapperRepositoryv
00000000 a __GLOBAL__I__Z18gWrapperRepositoryv.eh
00000190 T __Z18gWrapperRepositoryv
00001820 S __Z18gWrapperRepositoryv.eh
00001a58 b __ZGVZ18gWrapperRepositoryvE2wr
00001a60 b __ZZ18gWrapperRepositoryvE2wr

I understand older libtools gave the -Wl,-all_load flag, which is similar to
--whole-archive on the ld from GNU binutils. However, unlike GNU ld, you
can't turn off all_load for some archives, and leave it on for others, so you
end up messing up the linking of the implicit libraries:
^ioeng21:~/physiome_builds/trees/CellML_DOM_API_OSX cmiss$ g++ -Wl,-all_load
-g -O2 -o .libs/cellml_corba_server --whole-archive
cellml_corba_server-Main.o -Wl,-bind_at_load  /usr/lib/libxml2.dylib
-lpthread -lz /usr/lib/libiconv.dylib -lm -lomniORB4 -lomnithread
./.libs/libcellml_context.dylib ./.libs/libcellml_context_corba.dylib
./.libs/libcellml.dylib ./.libs/libcellml_corba.dylib
./.libs/libCORBASupport.a ./.libs/libltdlc.a
/usr/bin/ld: warning multiple definitions of symbol ___eprintf
/usr/lib/gcc/powerpc-apple-darwin8/4.0.0/libgcc.a(_eprintf.o) private
external definition of ___eprintf in section (__TEXT,__text)
/usr/lib/gcc/powerpc-apple-darwin8/4.0.0/libstdc++.dylib(single module)
definition of ___eprintf
/usr/bin/ld: warning multiple definitions of symbol ___divdi3
/usr/lib/gcc/powerpc-apple-darwin8/4.0.0/libgcc.a(_divdi3.o) private external
definition of ___divdi3 in section (__TEXT,__text)
/usr/lib/gcc/powerpc-apple-darwin8/4.0.0/libgcc_s.dylib(_divdi3_s.o)
definition of ___divdi3
/usr/bin/ld: warning multiple definitions of symbol ___udivdi3
/usr/lib/gcc/powerpc-apple-darwin8/4.0.0/libgcc.a(_udivdi3.o) private
external definition of ___udivdi3 in section (__TEXT,__text)
/usr/lib/gcc/powerpc-apple-darwin8/4.0.0/libgcc_s.dylib(_udivdi3_s.o)
definition of ___udivdi3
/usr/bin/ld: warning multiple definitions of symbol ___umoddi3
/usr/lib/gcc/powerpc-apple-darwin8/4.0.0/libgcc.a(_umoddi3.o) private
external definition of ___umoddi3 in section (__TEXT,__text)
/usr/lib/gcc/powerpc-apple-darwin8/4.0.0/libgcc_s.dylib(_umoddi3_s.o)
definition of ___umoddi3
 
(which is presumably why older versions dropped that flag, and caused this
bug).

Unless someone finds a better way, I think the correct solution will have to
be to unarchive the convenience libraries and link the objects manually.







    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/support/?func=detailitem&item_id=105489>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/





reply via email to

[Prev in Thread] Current Thread [Next in Thread]