Dewayne Geraghty
2015-Feb-02 07:44 UTC
Requested to rebuild /usr/lib/crt1.o with fPIC during vsftpd build
While trying to build ftp/vsftpd with different values of -march and gcc48, I receive this message (on 10.1Stable r277875M, amd64) /usr/local/bin/ld: /usr/lib/crt1.o: relocation R_X86_64_32 against `_DYNAMIC' can not be used when making a shared object; recompile with -fPIC Should I "just" add -fPIC to /usr/src/lib/csu/amd64/Makefile CFLAGS+= -fno-omit-frame-pointer -fPIC What are the likely ramifications? Detail cd /usr/ports/ftp/vsftpd && make clean deinstall package ... /usr/local/bin/gcc48 -o vsftpd main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o tunables.o ftpdataio.o secbuf.o ls.o postprivparent.o logging.o str.o netstr.o sysstr.o strlist.o banner.o filestr.o parseconf.o secutil.o ascii.o oneprocess.o twoprocess.o privops.o standalone.o hash.o tcpwrap.o ipaddrparse.o access.o features.o readwrite.o opts.o ssl.o sslslave.o ptracesandbox.o ftppolicy.o sysutil.o sysdeputil.o seccompsandbox.o -lssp_nonshared -Wl,-rpath,/usr/local/lib -L/usr/local/lib -fPIE -pie -Wl,-z,relro -Wl,-z,now `./vsf_findlibs.sh` /usr/local/bin/ld: /usr/lib/crt1.o: relocation R_X86_64_32 against `_DYNAMIC' can not be used when making a shared object; recompile with -fPIC /usr/lib/crt1.o: error adding symbols: Bad value collect2: error: ld returned 1 exit status *** [vsftpd] Error code 1 In this case, I'm using CFLAGS of -O2 -pipe -g0 -ggdb0 -DSTRIP_FBSDID -UDEBUGGING -UEBUGGING -UDEBUG -fPIC -march=core2 -mtune=core2 -I/usr/local/include -fno-strict-aliasing -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wall -W -Wshadow -Werror -Wformat-security -D_FORTIFY_SOURCE=2 I'm surprised that gcc is requesting that I rebuild crt1.o with -fPIC, while clang happily builds ftp/vsftpd. More importantly, are there any negative ramifications of building crt1 with -fPIC?? Examining the /usr/src/lib/csu/amd64/Makefile, which contains: Scrt1.s: crt1.c ${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1.c sed ${SED_FIX_NOTE} ${.TARGET} makes this request very confusing! Regards, Dewayne