Summary: | math/gotoblas: /usr/local/lib/gcc45/libgfortran.so.3: version GFORTRAN_1.4 required by /usr/ports/math/gotoblas/work/GotoBLAS2/test/sblat1 not foundgmake[1]: *** [level1] Error 1 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Product: | Ports & Packages | Reporter: | O. Hartmann <ohartmann> | ||||||||||
Component: | Individual Port(s) | Assignee: | Maho Nakata <maho> | ||||||||||
Status: | Closed FIXED | ||||||||||||
Severity: | Affects Only Me | ||||||||||||
Priority: | Normal | ||||||||||||
Version: | Latest | ||||||||||||
Hardware: | Any | ||||||||||||
OS: | Any | ||||||||||||
Attachments: |
|
Description
O. Hartmann
2011-10-04 10:20:10 UTC
Responsible Changed From-To: freebsd-ports-bugs->maho Over to maintainer (via the GNATS Auto Assign Tool) (1) You have multiple versions of lang/gcc4* installed, with incompatible versions of libgfortran.so; and (2) math/gotoblas has a bug: it does not preserve the rpath additions to the compiler flags from ports/Mk/bsd.gcc.mk that are necessary to tell rtld(1) which gfortran library is needed at runtime. As a result, math/gotoblas is built against the libgfortran.so from lang/gcc46, but at runtime rtld attempts to link it with the older libgfortran.so from lang/gcc45, and it fails the symbol version check. (2) should be fixed, but in the meantime, you should be able to work around the problem by removing all versions of lang/gcc4* other than lang/gcc46, so that no conflict occurs. (There are a number of other ways to circumvent the problem -- for example, disabling symbol version checking, or using libmap.conf(5) or other methods to direct rtld to the right library -- but they aren't needed by most users, and may be problematic.) b. Hi BF, Thanks for your analyze, This should be fixed in GotoBLAS2 port side. I'll fix it hopefully soon... > (2) math/gotoblas has a bug: it does not preserve the rpath additions > to the compiler flags from ports/Mk/bsd.gcc.mk that are necessary to > tell rtld(1) which gfortran library is needed at runtime. thanks Nakata Maho From: "b. f." <bf1783@googlemail.com> Subject: Re: ports/161273: math/gotoblas: /usr/local/lib/gcc45/libgfortran.so.3: version GFORTRAN_1.4 required by /usr/ports/math/gotoblas/work/GotoBLAS2/test/sblat1 not foundgmake[1]: *** [level1] Error 1 Date: Tue, 4 Oct 2011 20:40:50 -0400 > (1) You have multiple versions of lang/gcc4* installed, with > incompatible versions of libgfortran.so; and > (2) math/gotoblas has a bug: it does not preserve the rpath additions > to the compiler flags from ports/Mk/bsd.gcc.mk that are necessary to > tell rtld(1) which gfortran library is needed at runtime. > > As a result, math/gotoblas is built against the libgfortran.so from > lang/gcc46, but at runtime rtld attempts to link it with the older > libgfortran.so from lang/gcc45, and it fails the symbol version check. > (2) should be fixed, but in the meantime, you should be able to work > around the problem by removing all versions of lang/gcc4* other than > lang/gcc46, so that no conflict occurs. (There are a number of other > ways to circumvent the problem -- for example, disabling symbol > version checking, or using libmap.conf(5) or other methods to direct > rtld to the right library -- but they aren't needed by most users, and > may be problematic.) > > b. > On 10/4/11, Maho NAKATA <chat95@mac.com> wrote: > Hi BF, > > Thanks for your analyze, This should be fixed in GotoBLAS2 port side. > I'll fix it hopefully soon... In addition to fixing this in math/gotoblas -- which will be necessary in any case, because it overrides the default flags -- I think that we should: (A) add the rpath directive to the default FFLAGS that are used with USE_FORTRAN, as is now done for CFLAGS and LDFLAGS. Many Fortran ports compile objects with FFLAGS, and then link them with LDFLAGS, but there are exceptions -- we have no guarantee that this is always the case. (B) use the same default flags that are used by the gcc4* front-end, since the gfortran4* permits this. (Other Fortran compilers may not, so there may be some reluctance to do this for the minimal POSIX FFLAGS definition present in src/share/mk/sys.mk.) This mimics what is done in src/share/mk/bsd.cpu.mk and src/share/mk/sys.mk for CFLAGS, with the exception that we compare FFLAGS to the default POSIX value "-O" before making the default additions, rather than checking if FFLAGS is defined. If someone really wants to use just "-O" for FFLAGS, they can, for example, set FFLAGS="-O "(with an extra space). This ought to speed up compilation, reduce disk usage if the temporary directory is not tmpfs or mdmfs, and produce default packages with better performance for many ports. How about the attached patch? > >> (2) math/gotoblas has a bug: it does not preserve the rpath additions >> to the compiler flags from ports/Mk/bsd.gcc.mk that are necessary to >> tell rtld(1) which gfortran library is needed at runtime. > > thanks > Nakata Maho > > From: "b. f." <bf1783@googlemail.com> > Subject: Re: ports/161273: math/gotoblas: > /usr/local/lib/gcc45/libgfortran.so.3: version GFORTRAN_1.4 required by > /usr/ports/math/gotoblas/work/GotoBLAS2/test/sblat1 not foundgmake[1]: *** > [level1] Error 1 > Date: Tue, 4 Oct 2011 20:40:50 -0400 > >> (1) You have multiple versions of lang/gcc4* installed, with >> incompatible versions of libgfortran.so; and >> (2) math/gotoblas has a bug: it does not preserve the rpath additions >> to the compiler flags from ports/Mk/bsd.gcc.mk that are necessary to >> tell rtld(1) which gfortran library is needed at runtime. >> >> As a result, math/gotoblas is built against the libgfortran.so from >> lang/gcc46, but at runtime rtld attempts to link it with the older >> libgfortran.so from lang/gcc45, and it fails the symbol version check. >> (2) should be fixed, but in the meantime, you should be able to work >> around the problem by removing all versions of lang/gcc4* other than >> lang/gcc46, so that no conflict occurs. (There are a number of other >> ways to circumvent the problem -- for example, disabling symbol >> version checking, or using libmap.conf(5) or other methods to direct >> rtld to the right library -- but they aren't needed by most users, and >> may be problematic.) >> >> b. >> > Hi bf, I like your patch. Sounds reasonable. I'd like to wait gerald's answer and commit. thanks Nakata Maho From: "b. f." <bf1783@googlemail.com> Subject: Re: ports/161273: math/gotoblas: /usr/local/lib/gcc45/libgfortran.so.3: version GFORTRAN_1.4 required by /usr/ports/math/gotoblas/work/GotoBLAS2/test/sblat1 not foundgmake[1]: *** [level1] Error 1 Date: Tue, 04 Oct 2011 23:21:35 -0400 > On 10/4/11, Maho NAKATA <chat95@mac.com> wrote: >> Hi BF, >> >> Thanks for your analyze, This should be fixed in GotoBLAS2 port side. >> I'll fix it hopefully soon... > > In addition to fixing this in math/gotoblas -- which will be necessary > in any case, because it overrides the default flags -- I think that we > should: > > (A) add the rpath directive to the default FFLAGS that are used with > USE_FORTRAN, as is now done for CFLAGS and LDFLAGS. Many Fortran > ports compile objects with FFLAGS, and then link them with LDFLAGS, > but there are exceptions -- we have no guarantee that this is always > the case. > > (B) use the same default flags that are used by the gcc4* front-end, > since the gfortran4* permits this. (Other Fortran compilers may not, > so there may be some reluctance to do this for the minimal POSIX > FFLAGS definition present in src/share/mk/sys.mk.) This mimics what > is done in src/share/mk/bsd.cpu.mk and src/share/mk/sys.mk for CFLAGS, > with the exception that we compare FFLAGS to the default POSIX value > "-O" before making the default additions, rather than checking if > FFLAGS is defined. If someone really wants to use just "-O" for > FFLAGS, they can, for example, set FFLAGS="-O "(with an extra space). > This ought to speed up compilation, reduce disk usage if the temporary > directory is not tmpfs or mdmfs, and produce default packages with > better performance for many ports. > > How about the attached patch? > > >> >>> (2) math/gotoblas has a bug: it does not preserve the rpath additions >>> to the compiler flags from ports/Mk/bsd.gcc.mk that are necessary to >>> tell rtld(1) which gfortran library is needed at runtime. >> >> thanks >> Nakata Maho >> >> From: "b. f." <bf1783@googlemail.com> >> Subject: Re: ports/161273: math/gotoblas: >> /usr/local/lib/gcc45/libgfortran.so.3: version GFORTRAN_1.4 required by >> /usr/ports/math/gotoblas/work/GotoBLAS2/test/sblat1 not foundgmake[1]: *** >> [level1] Error 1 >> Date: Tue, 4 Oct 2011 20:40:50 -0400 >> >>> (1) You have multiple versions of lang/gcc4* installed, with >>> incompatible versions of libgfortran.so; and >>> (2) math/gotoblas has a bug: it does not preserve the rpath additions >>> to the compiler flags from ports/Mk/bsd.gcc.mk that are necessary to >>> tell rtld(1) which gfortran library is needed at runtime. >>> >>> As a result, math/gotoblas is built against the libgfortran.so from >>> lang/gcc46, but at runtime rtld attempts to link it with the older >>> libgfortran.so from lang/gcc45, and it fails the symbol version check. >>> (2) should be fixed, but in the meantime, you should be able to work >>> around the problem by removing all versions of lang/gcc4* other than >>> lang/gcc46, so that no conflict occurs. (There are a number of other >>> ways to circumvent the problem -- for example, disabling symbol >>> version checking, or using libmap.conf(5) or other methods to direct >>> rtld to the right library -- but they aren't needed by most users, and >>> may be problematic.) >>> >>> b. >>> >> On 10/4/11, Maho NAKATA <chat95@mac.com> wrote: > Hi bf, > > I like your patch. Sounds reasonable. I'd like to wait gerald's answer > and commit. > > thanks > Nakata Maho > > From: "b. f." <bf1783@googlemail.com> > Subject: Re: ports/161273: math/gotoblas: > /usr/local/lib/gcc45/libgfortran.so.3: version GFORTRAN_1.4 required by > /usr/ports/math/gotoblas/work/GotoBLAS2/test/sblat1 not foundgmake[1]: *** > [level1] Error 1 > Date: Tue, 04 Oct 2011 23:21:35 -0400 > >> On 10/4/11, Maho NAKATA <chat95@mac.com> wrote: >>> Hi BF, >>> >>> Thanks for your analyze, This should be fixed in GotoBLAS2 port side. >>> I'll fix it hopefully soon... >> >> In addition to fixing this in math/gotoblas -- which will be necessary >> in any case, because it overrides the default flags -- I think that we >> should: >> >> (A) add the rpath directive to the default FFLAGS that are used with >> USE_FORTRAN, as is now done for CFLAGS and LDFLAGS. Many Fortran >> ports compile objects with FFLAGS, and then link them with LDFLAGS, >> but there are exceptions -- we have no guarantee that this is always >> the case. >> >> (B) use the same default flags that are used by the gcc4* front-end, >> since the gfortran4* permits this. (Other Fortran compilers may not, >> so there may be some reluctance to do this for the minimal POSIX >> FFLAGS definition present in src/share/mk/sys.mk.) This mimics what >> is done in src/share/mk/bsd.cpu.mk and src/share/mk/sys.mk for CFLAGS, >> with the exception that we compare FFLAGS to the default POSIX value >> "-O" before making the default additions, rather than checking if >> FFLAGS is defined. If someone really wants to use just "-O" for >> FFLAGS, they can, for example, set FFLAGS="-O "(with an extra space). >> This ought to speed up compilation, reduce disk usage if the temporary >> directory is not tmpfs or mdmfs, and produce default packages with >> better performance for many ports. >> >> How about the attached patch? In retrospect, I didn't get that quite right -- it is just possible that a port sets USE_GCC but uses a Fortran compiler other than gfortran4*, so the changes to the default FFLAGS should be dependent on "${USE_FORTRAN} == yes". Please consider the attached patch instead of my first version. b. One additional note: I noticed that the latest version of the port differs from my last patch in two regards (unannotated patch attached): > --- Makefile 28 Sep 2011 06:21:19 -0000 1.26 > +++ Makefile 5 Oct 2011 11:29:28 -0000 > @@ -62,6 +62,10 @@ > GOTOFLAGS+= BINARY64=1 > .endif > > +.if ! ( defined(WITH_DYNAMIC_ARCH) && ( ${ARCH} == "amd64" || ${ARCH} == "i386" ) ) > +MANUAL_PACKAGE_BUILD= Optimizes for the build machine. > +.endif > + My patch had the conditional above because it doesn't make sense to build binary packages for anything other than i386 and amd64 WITH_DYNAMIC_ARCH. That's because in all other cases the port uses cpuid code on the build machine to set machine-dependent parameters, yielding packages that may be broken or suboptimal on different machines with the same ARCH. (Of course, someone may override the above with NO_IGNORE if desired.) > .if defined(WITH_DYNAMIC_ARCH) > GOTOFLAGS+= DYNAMIC_ARCH=1 > .endif > @@ -100,7 +104,7 @@ > ${WRKSRC}/lapack/laswp/Makefile \ > ${WRKSRC}/reference/Makefile > ${REINPLACE_CMD} -e "s+(ARCH)+(ARCH_)+" \ > - -e 's+${CROSS_SUFFIX}+${LOCALBASE}/bin/+' \ > + -e 's+$$(CROSS_SUFFIX)+${LOCALBASE}/bin/+' \ Since CROSS_SUFFIX is undefined in the port Makefile, and the "$" is not escaped, the first pattern in the above is empty, and the substitution is never made. The substitution is necessary to ensure that the tools from devel/binutils are used, and not the base system binutils. > ${WRKSRC}/Makefile.system > .if defined(WITH_OPENMP) > ${REINPLACE_CMD} -e "s+GOTO_NUM_THREADS+OMP_NUM_THREADS+g" \ From: "b. f." <bf1783@googlemail.com> Subject: Re: ports/161273: math/gotoblas: /usr/local/lib/gcc45/libgfortran.so.3: version GFORTRAN_1.4 required by /usr/ports/math/gotoblas/work/GotoBLAS2/test/sblat1 not foundgmake[1]: *** [level1] Error 1 Date: Wed, 05 Oct 2011 07:51:29 -0400 > One additional note: > > I noticed that the latest version of the port differs from my last > patch in two regards (unannotated patch attached): right, you noticed! > My patch had the conditional above because it doesn't make sense to > build binary packages for anything other than i386 and amd64 > WITH_DYNAMIC_ARCH. It just break on the tinderbox build, so I just disabled. >> .if defined(WITH_DYNAMIC_ARCH) >> GOTOFLAGS+= DYNAMIC_ARCH=1 >> .endif >> @@ -100,7 +104,7 @@ >> ${WRKSRC}/lapack/laswp/Makefile \ >> ${WRKSRC}/reference/Makefile >> ${REINPLACE_CMD} -e "s+(ARCH)+(ARCH_)+" \ >> - -e 's+${CROSS_SUFFIX}+${LOCALBASE}/bin/+' \ >> + -e 's+$$(CROSS_SUFFIX)+${LOCALBASE}/bin/+' \ > > Since CROSS_SUFFIX is undefined in the port Makefile, and the "$" is > not escaped, the first pattern in the above is empty, and the > substitution is never made. The substitution is necessary to ensure > that the tools from devel/binutils are used, and not the base system > binutils. I see. I just shut up portlint. This should be fixed. thanks bf! maho 2011-10-06 08:45:15 UTC FreeBSD ports repository Modified files: math/gotoblas Makefile math/gotoblas/files patch-Makefile.system Log: Fix build when gcc other than gcc46 exists. PR: 161273 Submitted by: Oliver Hartmann <ohartman@zedat.fu-berlin.de> Revision Changes Path 1.28 +2 -0 ports/math/gotoblas/Makefile 1.4 +2 -1 ports/math/gotoblas/files/patch-Makefile.system _______________________________________________ cvs-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/cvs-all To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org" State Changed From-To: open->closed fixed, thanks! On Wed, 5 Oct 2011, b. f. wrote:
> In retrospect, I didn't get that quite right -- it is just possible
> that a port sets USE_GCC but uses a Fortran compiler other than
> gfortran4*, so the changes to the default FFLAGS should be dependent
> on "${USE_FORTRAN} == yes". Please consider the attached patch
> instead of my first version.
Thanks for the patch, Brandan! I have applied the part that sets
FFLAGS in line with CFLAGS and LDFLAGS. I'm quite hesitant to do
the general CFLAGS gymnastics as part of bsd.gcc.mk and have omitted
this hunk for now.
Gerald
On 10/5/11, Maho NAKATA <chat95@mac.com> wrote: > From: "b. f." <bf1783@googlemail.com> > Subject: Re: ports/161273: math/gotoblas: > /usr/local/lib/gcc45/libgfortran.so.3: version GFORTRAN_1.4 required by > /usr/ports/math/gotoblas/work/GotoBLAS2/test/sblat1 not foundgmake[1]: *** > [level1] Error 1 > Date: Wed, 05 Oct 2011 07:51:29 -0400 > >> One additional note: >> >> I noticed that the latest version of the port differs from my last >> patch in two regards (unannotated patch attached): > right, > you noticed! It's amazing when I notice anything, isn't it? ;) Not that you have to accept all of the stuff I send, of course -- I don't want to sound presumptuous... >> My patch had the conditional above because it doesn't make sense to >> build binary packages for anything other than i386 and amd64 >> WITH_DYNAMIC_ARCH. > > It just break on the tinderbox build, so I just disabled. I think I see the problem, which was not really with the portion that you omitted, but with the fact that I set the DYNAMIC_ARCH_DEFAULT too late to have the desired effect. But it is important to prevent the package-building cluster or tinderboxes from building gotoblas in the WITHOUT_DYNAMIC_ARCH case, and on all non-x86 architectures, unless specifically requested by the user via NO_IGNORE, because, as I wrote before, the resulting packages may not work at all, or at least may not work very well, on machines that have the same ARCH as the build machine, but have different CPUs. How about the attached patch? b. From: "b. f." <bf1783@googlemail.com> Subject: Re: ports/161273: math/gotoblas: /usr/local/lib/gcc45/libgfortran.so.3: version GFORTRAN_1.4 required by /usr/ports/math/gotoblas/work/GotoBLAS2/test/sblat1 not foundgmake[1]: *** [level1] Error 1 Date: Sun, 09 Oct 2011 03:24:06 -0400 > machine, but have different CPUs. How about the attached patch? I like it very much. Thank you very very much! -- Nakata Maho http://accc.riken.jp/maho/ , JA OOO http://ja.openoffice.org/ http://blog.goo.ne.jp/nakatamaho/ ,GPG: http://accc.riken.jp/maho/maho.pgp.txt |