Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] vt-integration
From: Brian W. Barrett (brbarret_at_[hidden])
Date: 2007-12-05 11:52:51


OS X enforces a no duplicate symbol rule when flat namespaces are in use
(the default on OS X). If all the libraries are two-level namespace
libraries (libSystem.dylib, aka libm.dylib is two-level), then duplicate
symbols are mostly ok.

Libtool by default forces a flat namespace in sharedlibraries to work
around an oddity on early OS X systems with undefined references. There's
also a way to make static two-level namespaces (I think), but I haven't
tried that before). You can cause Libtool (and the linker) to be a bit
more sane if you set the environment variable MACOSX_DEPLOYMENT_TARGET to
either 10.3 or 10.4. The shared library rules followed by Libtool and the
compiler chain will then be for that OS X release, rather than for the
original 10.0. We don't support anything older than 10.3, so this isn't
really a problem.

Of course, since the default for users is to emit 10.0 target code, that
can be a bit hard to make work out. So you might want to have a configure
test to figure all that out and not build the IO intercept library in some
cases.

Brian

On Wed, 5 Dec 2007, Jeff Squyres wrote:

> I know that OS X's linker is quite different than the Linux linker --
> you might want to dig into the ld(1) man page on OS X as a starting
> point, and/or consult developer.apple.com for more details.
>
>
> On Dec 5, 2007, at 10:04 AM, Matthias Jurenz wrote:
>
>> Hi Jeff,
>>
>> I have added checks for the functions open64, creat64, etc. to the
>> VT's configure script,
>> so building of VT works fine on MacOS AND Solaris (Terry had the
>> same problem).
>> Thanks for your hint ;-)
>>
>> Unfortunately, there is a new problem on MacOS. I get the following
>> linker errors, if I try
>> to link an application with the VT libraries:
>>
>> gcc -finstrument-functions pi_seq.o -lm -o pi_seq
>> -L/Users/jurenz/lib/vtrace-5.4.1/lib -lvt -lotf -lz -L/usr/local/
>> lib/ -lbfd -lintl -L/usr/local/lib/ -liberty
>> /usr/bin/ld: multiple definitions of symbol _close
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(close.So)
>> definition of _close
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _close in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _fclose
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(fclose.So)
>> definition of _fclose
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _fclose in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _fdopen
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(fdopen.So)
>> definition of _fdopen
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _fdopen in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _fgets
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(fgets.So)
>> definition of _fgets
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _fgets in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _fopen
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(fopen.So)
>> definition of _fopen
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _fopen in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _fprintf
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../
>> libm.dylib(fprintf.So) definition of _fprintf
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _fprintf in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _fputc
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(fputc.So)
>> definition of _fputc
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _fputc in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _fread
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(fread.So)
>> definition of _fread
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _fread in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _fwrite
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(fwrite.So)
>> definition of _fwrite
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _fwrite in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _open
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(open.So)
>> definition of _open
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _open in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _read
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(read.So)
>> definition of _read
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _read in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _rewind
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(rewind.So)
>> definition of _rewind
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _rewind in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _write
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(write.So)
>> definition of _write
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _write in section (__TEXT,__text)
>> /usr/bin/ld: multiple definitions of symbol _writev
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(writev.So)
>> definition of _writev
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _writev in section (__TEXT,__text)
>> /usr/bin/ld: warning multiple definitions of symbol _lseek
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _lseek in section (__TEXT,__text)
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(lseek.So)
>> definition of _lseek
>> /usr/bin/ld: warning multiple definitions of symbol _fseek
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _fseek in section (__TEXT,__text)
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(fseek.So)
>> definition of _fseek
>> /usr/bin/ld: warning multiple definitions of symbol _fseeko
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _fseeko in section (__TEXT,__text)
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(fseek.So)
>> definition of _fseeko
>> /usr/bin/ld: warning multiple definitions of symbol _fscanf
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _fscanf in section (__TEXT,__text)
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(fscanf.So)
>> definition of _fscanf
>> /usr/bin/ld: warning multiple definitions of symbol _putc
>> /Users/jurenz/lib/vtrace-5.4.1/lib/libvt.a(vt_iowrap.o) definition
>> of _putc in section (__TEXT,__text)
>> /usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libm.dylib(putc.So)
>> definition of _putc
>> collect2: ld returned 1 exit status
>> make: *** [pi_seq] Error 1
>>
>> To intercept I/O calls, VT overwrites the Libc's I/O functions in
>> the source file vtlib/vt_iowrap.c.
>> It seems that the GNU compiler on MacOS doen't like that ?? Has
>> anyone an idea what's wrong ?
>> I have used the GNU compiler version 4.0.1 on MacOS 9 (darwin 8.11.1).
>> To avoid this problem, I/O tracing will be disabled on MacOS... but
>> that's not a nice solution :-(
>>
>>
>> Regards,
>> Matthias
>>
>>> Unfortunately, VT fails to compile on OS X Leopard (10.5.1).
>>>
>>> - Is there a way to remove the anonymous variadic macros?
>>> - open64, creat64, etc. do not appear to exist on OS X.
>>>
>>> I don't know if you want to go through the work of supporting OS X
>> or
>>> not -- if not, we should put in appropriate controls so that VT will
>>> "turn itself off" when it detects that it is on a system that does
>> not
>>> support what it needs (e.g., open64, creat64, ...etc.).
>>>
>>> Here's the output from a build on OS X 10.5.1:
>>>
>>> Making all in vtlib
>>> gcc -DHAVE_CONFIG_H -I. -I.. -I../tools/opari/lib -I../extlib/otf/
>>> otflib -I../extlib/otf/otflib -DBINDIR=\"/Users/jsquyres/
>> bogus/bin
>>> \" -DDATADIR=\"/Users/jsquyres/bogus/share/vampirtrace\" -DRFG -
>>> DVT_IOWRAP -g -Wall -Wundef -Wno-long-long -Wsign-compare -
>> Wmissing-
>>> prototypes -Wstrict-prototypes -Wcomment -pedantic -Wno-long-
>> double -
>>> Werror-implicit-function-declaration -finline-functions -fno-strict-
>>> aliasing -MT vt_iowrap.o -MD -MP -MF .deps/vt_iowrap.Tpo -c -o
>>> vt_iowrap.o vt_iowrap.c
>>> In file included from vt_iowrap.c:32:
>>> vt_iowrap.h:239:20: warning: anonymous variadic macros were
>> introduced
>>> in C99
>>> vt_iowrap.h:282:43: warning: anonymous variadic macros were
>> introduced
>>> in C99
>>> vt_iowrap.h:328:33: warning: anonymous variadic macros were
>> introduced
>>> in C99
>>> vt_iowrap.h:335:38: warning: anonymous variadic macros were
>> introduced
>>> in C99
>>> vt_iowrap.c: In function ‘open’:
>>> vt_iowrap.c:170: warning: ‘mode_t’ is promoted to ‘int’ when passed
>>> through ‘...’
>>> vt_iowrap.c:170: warning: (so you should pass ‘int’ not ‘mode_t’ to
>>> ‘va_arg’)
>>> vt_iowrap.c:170: note: if this code is reached, the program will
>> abort
>>> vt_iowrap.c: At top level:
>>> vt_iowrap.c:193: warning: no previous prototype for ‘open64’
>>> vt_iowrap.c: In function ‘open64’:
>>> vt_iowrap.c:204: warning: ‘mode_t’ is promoted to ‘int’ when passed
>>> through ‘...’
>>> vt_iowrap.c:204: note: if this code is reached, the program will
>> abort
>>> vt_iowrap.c: At top level:
>>> vt_iowrap.c:249: warning: no previous prototype for ‘creat64’
>>> vt_iowrap.c:368: error: syntax error before ‘lseek64’
>>> vt_iowrap.c:368: error: syntax error before ‘off64_t’
>>> vt_iowrap.c:369: warning: return type defaults to ‘int’
>>> vt_iowrap.c:369: warning: function declaration isn’t a prototype
>>> vt_iowrap.c: In function ‘lseek64’:
>>> vt_iowrap.c:371: error: ‘off64_t’ undeclared (first use in this
>>> function)
>>> vt_iowrap.c:371: error: (Each undeclared identifier is reported only
>>> once
>>> vt_iowrap.c:371: error: for each function it appears in.)
>>> vt_iowrap.c:371: error: syntax error before ‘ret’
>>> vt_iowrap.c:376: error: implicit declaration of function ‘off64_t’
>>> vt_iowrap.c:376: error: syntax error before ‘)’ token
>>> vt_iowrap.c:383: error: ‘ret’ undeclared (first use in this
>> function)
>>> vt_iowrap.c:383: error: syntax error before ‘)’ token
>>> vt_iowrap.c:385: error: ‘fd’ undeclared (first use in this function)
>>> vt_iowrap.c:389: warning: control reaches end of non-void function
>>> vt_iowrap.c: At top level:
>>> vt_iowrap.c:542: error: syntax error before ‘off64_t’
>>> vt_iowrap.c:543: warning: function declaration isn’t a prototype
>>> vt_iowrap.c: In function ‘pread64’:
>>> vt_iowrap.c:550: error: syntax error before ‘off64_t’
>>> vt_iowrap.c:550: warning: function declaration isn’t a prototype
>>> vt_iowrap.c:550: error: ‘fd’ undeclared (first use in this function)
>>> vt_iowrap.c:550: error: ‘buf’ undeclared (first use in this
>> function)
>>> vt_iowrap.c:550: error: ‘count’ undeclared (first use in this
>> function)
>>> vt_iowrap.c:550: error: ‘offset’ undeclared (first use in this
>> function)
>>> vt_iowrap.c:557: error: syntax error before ‘off64_t’
>>> vt_iowrap.c:557: warning: function declaration isn’t a prototype
>>> vt_iowrap.c: At top level:
>>> vt_iowrap.c:567: error: syntax error before ‘off64_t’
>>> vt_iowrap.c:568: warning: function declaration isn’t a prototype
>>> vt_iowrap.c: In function ‘pwrite64’:
>>> vt_iowrap.c:575: error: syntax error before ‘off64_t’
>>> vt_iowrap.c:575: warning: function declaration isn’t a prototype
>>> vt_iowrap.c:575: error: ‘fd’ undeclared (first use in this function)
>>> vt_iowrap.c:575: error: ‘buf’ undeclared (first use in this
>> function)
>>> vt_iowrap.c:575: error: ‘count’ undeclared (first use in this
>> function)
>>> vt_iowrap.c:575: error: ‘offset’ undeclared (first use in this
>> function)
>>> vt_iowrap.c:582: error: syntax error before ‘off64_t’
>>> vt_iowrap.c:582: warning: function declaration isn’t a prototype
>>> vt_iowrap.c: At top level:
>>> vt_iowrap.c:617: warning: no previous prototype for ‘fopen64’
>>> vt_iowrap.c:743: error: syntax error before ‘off64_t’
>>> vt_iowrap.c:744: warning: function declaration isn’t a prototype
>>> vt_iowrap.c: In function ‘fseeko64’:
>>> vt_iowrap.c:751: error: syntax error before ‘off64_t’
>>> vt_iowrap.c:751: warning: function declaration isn’t a prototype
>>> vt_iowrap.c:751: error: ‘stream’ undeclared (first use in this
>> function)
>>> vt_iowrap.c:751: error: ‘offset’ undeclared (first use in this
>> function)
>>> vt_iowrap.c:751: error: ‘whence’ undeclared (first use in this
>> function)
>>> vt_iowrap.c:760: error: syntax error before ‘off64_t’
>>> vt_iowrap.c:760: warning: function declaration isn’t a prototype
>>> vt_iowrap.c: At top level:
>>> vt_iowrap.c:815: warning: type defaults to ‘int’ in declaration of
>>> ‘fpos64_t’
>>> vt_iowrap.c:815: error: syntax error before ‘*’ token
>>> vt_iowrap.c:815: warning: function declaration isn’t a prototype
>>> vt_iowrap.c: In function ‘fsetpos64’:
>>> vt_iowrap.c:822: warning: type defaults to ‘int’ in declaration of
>>> ‘fpos64_t’
>>> vt_iowrap.c:822: error: syntax error before ‘*’ token
>>> vt_iowrap.c:822: warning: function declaration isn’t a prototype
>>> vt_iowrap.c:822: error: ‘stream’ undeclared (first use in this
>> function)
>>> vt_iowrap.c:822: error: ‘pos’ undeclared (first use in this
>> function)
>>> vt_iowrap.c:831: warning: type defaults to ‘int’ in declaration of
>>> ‘fpos64_t’
>>> vt_iowrap.c:831: error: syntax error before ‘*’ token
>>> vt_iowrap.c:831: warning: function declaration isn’t a prototype
>>> make[5]: *** [vt_iowrap.o] Error 1
>>> make[4]: *** [all-recursive] Error 1
>>> make[3]: *** [all] Error 2
>>> make[2]: *** [all-recursive] Error 1
>>> make[1]: *** [all-recursive] Error 1
>>> make: *** [all-recursive] Error 1
>>> [22:44] beezle:~/svn/vt-integration %
>>>
>>>
>>> --
>>> Jeff Squyres
>>> Cisco Systems
>>>
>>>
>>> _______________________________________________
>>> devel mailing list
>>> devel_at_[hidden]
>>> http://www.open-mpi.org/mailman/listinfo.cgi/devel
>
>
>