[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: compiling freebsd 5.1-RELEASE-p10 on 4.8-RELEASE
edelkind-debug@episec.com said this stuff:
> 'make buildworld' fails with the following error:
>
> -------------------------------------------------------
> building shared library libkse.so.1
> thr_libc.So: In function `sigaction':
> thr_libc.So(.text+0x54): multiple definition of `_sigaction'
> thr_sigaction.So(.text+0x0): first defined here
> thr_libc.So: In function `sigprocmask':
> thr_libc.So(.text+0x34): multiple definition of `_sigprocmask'
> thr_sigprocmask.So(.text+0x0): first defined here
> *** Error code 1
>
> Stop in /aux/cvsup/src/lib/libpthread.
> *** Error code 1
> -------------------------------------------------------
>
> Target: FreeBSD 5.1-RELEASE-p10 (cvsup of RELENG_5_1, 2003/10/16)
> Origin: FreeBSD 4.8-RELEASE
>
'make -d l' reveals the following:
cc -nostdlib -L/usr/lib -o thr_libc.So -Wl,-x,-r thr_support.So -lc_pic
/usr/lib/libc_pic.a should not be linked with the new target -- it's
from 4.8-RELEASE, after all. What buildworld really means to do is link
it with /usr/obj/usr/src/i386/usr/lib/libc_pic.a.
Unfortunately, /usr/obj/usr/src/i386/usr/lib/libc_pic.a doesn't exist,
because it wasn't installed when the build-requisite tree was populated.
It would seem that some lazy programmer "fixed" this by adding
-L/usr/lib instead of correcting it properly. This problem may not show
up if 'make world' is used, but such an action is dangerous when
upgrading from 4.x to 5.x.
A test:
% cd /usr/obj/usr/src/lib/libpthread
% env PATH=../../i386/usr/bin cc -nostdlib -L../libc -o thr_libc.So \
-Wl,-x,-r thr_support.So -lc_pic
% cd /usr/src
% make
This action successfully links libkse.so.1.
The proper solution:
Since we need to install lib/libc/libc_pic.a as an object prerequisite,
we need to add the directory to '_prebuild_libs' in the toplevel
Makefile.inc1 (i.e. /usr/src/...). For example:
----------------------------------------------------[cut here]--
--- Makefile.inc1.orig Thu Oct 16 20:11:47 2003
+++ Makefile.inc1 Thu Oct 16 20:12:50 2003
@@ -796,7 +796,7 @@
lib/libncurses lib/libopie lib/libpam lib/libradius \
lib/librpcsvc \
lib/libsbuf lib/libtacplus lib/libutil lib/libypclnt \
- lib/libz lib/msun
+ lib/libz lib/msun lib/libc
lib/libopie__L lib/libradius__L lib/libtacplus__L: lib/libmd__L
lib/libypclnt__L: lib/librpcsvc__L
----------------------------------------------------[cut here]--
Then, of course, we must remove the erroneous '-L/usr/lib' from the
loader command line.
The offending option is in /usr/src/lib/libpthread/support/Makefile.inc:
----------------------------------------------------[cut here]--
--- Makefile.inc.orig Thu Oct 16 20:20:56 2003
+++ Makefile.inc Thu Oct 16 20:21:12 2003
@@ -6,5 +6,5 @@
SOBJS+= thr_libc.So
thr_libc.So: thr_support.So
- ${CC} -nostdlib -L/usr/lib -o ${.TARGET} -Wl,-x,-r ${.ALLSRC} -lc_pic
+ ${CC} -nostdlib -o ${.TARGET} -Wl,-x,-r ${.ALLSRC} -lc_pic
----------------------------------------------------[cut here]--
And that should do it.
ari