Date: Fri, 2 Jul 2010 16:02:50 -0700 From: Garrett Cooper <yanefbsd@gmail.com> To: Matthew Fleming <mdf356@gmail.com> Cc: freebsd-hackers@freebsd.org Subject: Re: Using lex in a shared library Message-ID: <AANLkTimGsM7Ibaryx6e3gLSy5xpkpYxQmE3w5gAwlXXD@mail.gmail.com> In-Reply-To: <AANLkTilp0zvMRbw96cifhIzmT4YbNVkxgOFZFa_nvl2m@mail.gmail.com> References: <AANLkTilp0zvMRbw96cifhIzmT4YbNVkxgOFZFa_nvl2m@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Jul 2, 2010 at 2:51 PM, Matthew Fleming <mdf356@gmail.com> wrote: > I have the following Makefile for a shared library at $work: > > ISI_TOP=3D =A0 =A0 =A0 =A0../.. > > LIB=3D =A0 =A0 =A0 =A0 =A0 =A0isi_date > SHLIB_MAJOR=3D =A0 =A01 > SHLIB_MINOR=3D =A0 =A00 > SRCS=3D =A0 =A0 =A0 =A0 =A0 date.c date_parser.new.c lex.yy.c > INCS=3D =A0 =A0 =A0 =A0 =A0 date.h > INCLUDEDIR=3D =A0 =A0 /usr/include/isi_date > > YFLAGS+=3D =A0 =A0 =A0 =A0-vt > FLEX=3D =A0 =A0 =A0 =A0 =A0 /usr/bin/flex > LDADD=3D =A0 =A0 =A0 =A0 =A0-ll > > CLEANFILES+=3D =A0 =A0date_parser.new.c y.tab.h y.tab.c lex.yy.c y.output= \ > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0check_date.log test > > lex.yy.c: date_lexer.new.l > =A0 =A0 =A0 =A0${FLEX} $> > > CFLAGS+=3D =A0 =A0 =A0 =A0-I${.CURDIR} > #CFLAGS+=3D =A0 =A0 =A0 -g > > .include "${ISI_TOP}/isi.lib.mk" > > > > This builds fine as on i386. =A0I'm trying to get all our user-space to > be 64-bit clean, and I run into an error when building on amd64: > > /data/sb/BR_MDF_64CLEAN/obj/data/sb/BR_MDF_64CLEAN/src/tmp/usr/bin/ld: > /data/sb/BR_MDF_64CLEAN/obj/data/sb/BR_MDF_64CLEAN/src/tmp/usr/lib/libl.a= (libyywrap.o): > relocation R_X86_64_32 can not be used when making a shared object; > recompile with -fPIC > /data/sb/BR_MDF_64CLEAN/obj/data/sb/BR_MDF_64CLEAN/src/tmp/usr/lib/libl.a= : > could not read symbols: Bad value > > The following diff makes the compile work, but I have no idea (yet) > whether this will run, if it's the right solution, etc. > > > Index: usr.bin/lex/lib/Makefile > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- usr.bin/lex/lib/Makefile =A0 =A0(revision 153343) > +++ usr.bin/lex/lib/Makefile =A0 =A0(working copy) > @@ -4,11 +4,16 @@ > > =A0LIB=3D =A0 =A0ln > =A0SRCS=3D =A0 libmain.c libyywrap.c > -NO_PIC=3D > +#NO_PIC=3D > > +SHLIB_MAJOR=3D =A0 1 > +SHLIB_MINOR=3D =A0 0 > + > =A0.if ${MK_INSTALLLIB} !=3D "no" > =A0LINKS=3D =A0${LIBDIR}/libln.a ${LIBDIR}/libl.a > =A0LINKS+=3D =A0 =A0 =A0 =A0${LIBDIR}/libln.a ${LIBDIR}/libfl.a > +LINKS+=3D =A0 =A0 =A0 =A0${LIBDIR}/libln.so ${LIBDIR}/libl.so > +LINKS+=3D =A0 =A0 =A0 =A0${LIBDIR}/libln${LIB_SUFFIX}.so ${LIBDIR}/libl$= {LIB_SUFFIX}.so > =A0.endif > > =A0.if ${MK_PROFILE} !=3D "no" The static-only version was done on purpose: Revision 1.2: download - view: text, markup, annotated - select for diffs Thu Aug 25 23:11:07 1994 UTC (15 years, 10 months ago) by wollman Branches: MAIN CVS tags: RELENG_2_1_7_RELEASE, RELENG_2_1_6_RELEASE, RELENG_2_1_6_1_RELEASE, RELENG_2_1_5_RELEASE, RELENG_2_1_0_RELEASE, RELENG_2_1_0_BP, RELENG_2_0_5_RELEASE, RELENG_2_0_5_BP, RELENG_2_0_5_ALPHA, RELENG_2_0_5, RELEASE_2_0, BETA_2_0, ALPHA_2_0 Branch point for: RELENG_2_1_0 Diff to: previous 1.1: preferred, colored Changes since revision 1.1: +2 -8 lines We really, really /don't/ want to have a shared lex library. Also, current users should note that the old 1.1.5 lex can't process the new scan.l, so you have to copy initscan.c to obj/scan.c before it will build. Garrett Wollman probably has more information about why this was done. I think that fixing the lib to build with the appropriate options (not -m32, or CPUTYPE =3D> some 32-bit x86 variant, etc) is what really needs to be done here. Thanks, -Garrett
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTimGsM7Ibaryx6e3gLSy5xpkpYxQmE3w5gAwlXXD>