Using lex in a shared library
Matthew Fleming
mdf356 at gmail.com
Fri Jul 2 21:51:17 UTC 2010
I have the following Makefile for a shared library at $work:
ISI_TOP= ../..
LIB= isi_date
SHLIB_MAJOR= 1
SHLIB_MINOR= 0
SRCS= date.c date_parser.new.c lex.yy.c
INCS= date.h
INCLUDEDIR= /usr/include/isi_date
YFLAGS+= -vt
FLEX= /usr/bin/flex
LDADD= -ll
CLEANFILES+= date_parser.new.c y.tab.h y.tab.c lex.yy.c y.output \
check_date.log test
lex.yy.c: date_lexer.new.l
${FLEX} $>
CFLAGS+= -I${.CURDIR}
#CFLAGS+= -g
.include "${ISI_TOP}/isi.lib.mk"
This builds fine as on i386. I'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
===================================================================
--- usr.bin/lex/lib/Makefile (revision 153343)
+++ usr.bin/lex/lib/Makefile (working copy)
@@ -4,11 +4,16 @@
LIB= ln
SRCS= libmain.c libyywrap.c
-NO_PIC=
+#NO_PIC=
+SHLIB_MAJOR= 1
+SHLIB_MINOR= 0
+
.if ${MK_INSTALLLIB} != "no"
LINKS= ${LIBDIR}/libln.a ${LIBDIR}/libl.a
LINKS+= ${LIBDIR}/libln.a ${LIBDIR}/libfl.a
+LINKS+= ${LIBDIR}/libln.so ${LIBDIR}/libl.so
+LINKS+= ${LIBDIR}/libln${LIB_SUFFIX}.so ${LIBDIR}/libl${LIB_SUFFIX}.so
.endif
.if ${MK_PROFILE} != "no"
Thanks,
matthew
More information about the freebsd-hackers
mailing list