[Rivet] 64 bit root

James Monk jmonk at fnal.gov
Mon Feb 25 16:22:11 GMT 2008


Hi everyone,

I just installed root again on my laptop and have once again come  
across problem linking with Rivet/AGILe.  This time it's because the  
root build system uses the -m64 flag, which creates 64 bit x86_64 libs  
and installs them in the default  area of /usr/local/lib.  Rivet, on  
the other hand, creates 32 bit i386 libs:

	/usr/local/lib/libAGILe.dylib: Mach-O dynamically linked shared  
library i386
	/usr/local/lib/root/libCore.dylib: Mach-O 64-bit dynamically linked  
shared library x86_64

compare this to the supplied gcc libraries for instance:

	/usr/lib/libgcc_s.1.dylib: Mach-O universal binary with 4 architectures
	/usr/lib/libgcc_s.1.dylib (for architecture i386):	Mach-O dynamically  
linked shared library i386 	
	/usr/lib/libgcc_s.1.dylib (for architecture x86_64):	Mach-O 64-bit  
dynamically linked shared library x86_64
	/usr/lib/libgcc_s.1.dylib (for architecture ppc):	Mach-O dynamically  
linked shared library ppc
	/usr/lib/libgcc_s.1.dylib (for architecture ppc64):	Mach-O 64-bit  
dynamically linked shared library ppc64

Because root adds the -m64 flag to the rivetgun link line it cannot  
use the i386 AGILe libs and so there are undefined symbols all over  
the place.  Obviously I will modify the root build script to create a  
fat library that contains both the i386 and x86_64 objects, but maybe  
I should also modify the Cedar autotools to create a fat binary of  
Cedar libraries for OSX rather than just the i386 ones - that way when  
someone forces 64 bit mode in future it will work without modification  
because the Mach-O linker determines which architecture it should be  
using.

Until then, anyone using rivetgun on a 64 bit mac may run up against  
this problem, depending upon how root was compiled.

cheers,

James


More information about the Rivet mailing list