On Fri, 13 Jun 2003, Henrique de Moraes Holschuh wrote: > On Fri, 13 Jun 2003, [EMAIL PROTECTED] wrote: > > Compiling with the -fPIC fixes the problem. I had to do this for the > > following: imclient.c imparse.c xmalloc.c imapurl.c iptostring.c assert.c > > util.c libisieve.c prot.c > > > > Why does -fPIC fix this problem? > > Because of either: > 1. AMD64 is unforgiving of non-PIC code mixed with PIC code where it > shouldn't be (libraries) > 2. Compiler bugs. > > Anything that goes inside a lib should be -fPIC. Really. I have done this in > the Debian build (which runs OK in S/390, IA64, Alpha, MIPS, MIPS-EL...) > ages ago. I don't know if these changes are in CMU Cyrus.
This in true only for shared libs unless you are trying to link an archive into a shared lib (which can be the case with perl modules). Position independent code adds some overhead. I think CMU folks like to build things static as much as possible for performance reasons. > I don't think the Cyrus build uses --shared, but I didn't check. > > > >>../../lib/libcyrus.a(imclient.o): relocation R_X86_64_32 can not be used > > >>when making a shared object; recompile with -fPIC > > Yep. Arch dislikes mixing PIC and non-PIC code inside a relocatable object. Correct. On Solaris, I build lib/ and perl/sieve/lib with -fPIC just to build cyrus-imap perl stuff. -- Igor