libtool
[Top][All Lists]
Advanced

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

predep_objects & postdep_objects with Intel 8.1


From: Gary Kumfert
Subject: predep_objects & postdep_objects with Intel 8.1
Date: Thu, 16 Dec 2004 14:11:22 -0800 (PST)

Hi,

I'm tracking down an issue between Intel 8.1 and libtool 1.5.10.
It seems that libtool adds and crtbeginS.o crtendS.o files to
the link line for shared libraries... then icpc does the same..
then ld complains about multiply defined symbols!  Eeek!

Shouldn't libtool (or libtool.m4) detect these object files
already appear in the link line and not add them directly?
Interestingly libtool (correctly) does not insert crtbeginS.o and
crtendS.o into shared library link lines with icc or ifort.
Why icpc?

Here's some of the differences in what Intel 7.0, 8.0, and 8.1
pass to ld.  Note that the differences between 8.0 and 8.1 seem
to be significant!  In particular 8.1 seems to use GNU's crtbeginS.o and
crtendS.o.   7.0 & 8.0 seems to rely on intel's crtxi.o and crtxn.o files
instead.

I admit that I don't really understand what low-level linker trickery
these files accomplish.  (A pointer to some literature would be helpful.)

Help?

Gary

------------------------------------------------------------------------
  Gary Kumfert, Ph.D.                               <address@hidden>
  Center for Applied Scientific Computing          phone: 925-424-2580
  Lawrence Livermore National Laboratory           fax:   925-424-2477
  P.O. Box 808,    L-365
  Livermore, CA 94551-0808



% cat foo.c
int blah() {
  return 1;
}


#
# First I verify the versions of these compilers...
#

% /usr/local/intel/compiler70/ia32/bin/icc  -V
Intel(R) C++ Compiler for 32-bit applications, Version 7.1   Build 20030701Z
Copyright (C) 1985-2003 Intel Corporation.  All rights reserved.

GNU ld version 2.14.90.0.4 20030523
  Supported emulations:
   elf_i386
   i386linux


%  /usr/local/intel/compiler80/bin/icc -V
Intel(R) C++ Compiler for 32-bit applications, Version 8.0   Build 20040520Z
Package ID: l_cc_pc_8.0.066_pe067.1
Copyright (C) 1985-2004 Intel Corporation.  All rights reserved.

GNU ld version 2.14.90.0.4 20030523
  Supported emulations:
   elf_i386
   i386linux

%  icc -V
Intel(R) C++ Compiler for 32-bit applications, Version 8.1    Build 20040921Z
Package ID: l_cc_pc_8.1.022
Copyright (C) 1985-2004 Intel Corporation.  All rights reserved.

GNU ld version 2.14.90.0.4 20030523
  Supported emulations:
   elf_i386
   i386linux

#
# Next I see what gets passed to the GNU ld.
#

%  /usr/local/intel/compiler70/ia32/bin/icc -shared -v foo.o -o libfoo.so
ld  \
    /usr/lib/crti.o \
    /opt/intel/compiler70/ia32/lib/crtxi.o \
    -shared \
    --version-script \
    /opt/intel/compiler70/ia32/lib/icrt.internal.map \
    -u \
    ___get_intrinsics \
    -o \
    libfoo.so \
    -rpath \
    /usr/local/intel/compiler70/ia32/lib \
    foo.o \
    -Qy \
    -L/opt/intel/compiler70/ia32/lib \
    -L/usr/lib \
    -Bstatic \
    -limf \
    -Bdynamic \
    -lm \
    -Bstatic \
    -lirc \
    -Bstatic \
    -lcprts \
    -Bdynamic \
    -lcxa \
    -Bstatic \
    -lunwind \
    -Bdynamic \
    -lc \
    /opt/intel/compiler70/ia32/lib/crtxn.o \
    /usr/lib/crtn.o

% /usr/local/intel/compiler80/bin/icc -shared -v foo.o -o libfoo.so
Version 8.0
ld    /usr/lib/crti.o /usr/local/intel/compiler80/lib/crtxi.o -shared
--version-script /usr/local/intel/compiler80/lib/icrt.internal.map -m elf_i386
-o libfoo.so -rpath /usr/local/intel/compiler80/lib foo.o -Qy
-L/usr/local/intel/compiler80/lib -L/usr/lib -limf -lm -lcprts -lcxa -lunwind
-lirc -lc -lirc /usr/local/intel/compiler80/lib/crtxn.o /usr/lib/crtn.o

%  icc -shared -v foo.o -o libfoo.so
Version 8.1
ld    /usr/lib/crti.o
/usr/local/tools/gnu/gcc/3.3.3_chaos_2_ia32/lib/gcc-lib/i686-pc-linux-gnu/3.3.3/crtbeginS.o
--eh-frame-hdr -shared -m elf_i386 -o libfoo.so -rpath
/usr/local/intel/compiler81/lib foo.o -Qy -L/usr/local/intel/compiler81/lib
-L/usr/local/tools/gnu/gcc/3.3.3_chaos_2_ia32/lib/gcc-lib/i686-pc-linux-gnu/3.3.3
-L/usr/local/tools/gnu/gcc/3.3.3_chaos_2_ia32/lib/gcc-lib/i686-pc-linux-gnu/3.3.3/../../..
-L/usr/lib -limf -lm -lirc -lc -lgcc_s -lirc_s
/usr/local/tools/gnu/gcc/3.3.3_chaos_2_ia32/lib/gcc-lib/i686-pc-linux-gnu/3.3.3/crtendS.o
/usr/lib/crtn.o





reply via email to

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