Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |  

This web mail archive is frozen.

This page is part of a frozen web archive of this mailing list.

You can still navigate around this archive, but know that no new mails have been added to it since July of 2016.

Click here to be taken to the new web archives of this list; it includes all the mails that are in this frozen archive plus all new mails that have been sent to the list since it was migrated to the new archives.

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
>
>
>