On Tue, Mar 10 2020, Theo Buehler <t...@theobuehler.org> wrote: > On Tue, Mar 10, 2020 at 06:35:04PM +0100, Jeremie Courreges-Anglas wrote: >> On Mon, Mar 09 2020, Stuart Henderson <s...@spacehopper.org> wrote: >> > On 2020/03/09 10:42, Theo Buehler wrote: >> >> On Mon, Jan 13, 2020 at 12:50:32PM +0000, Stuart Henderson wrote: >> >> > 2/3 through a bulk build and I see that this breaks scipy (missing >> >> > symbols, >> >> > blas/cblas-related) so needs a bit more work, but I think it's generally >> >> > along the right lines. >> >> >> >> Not sure if this provides any useful clue, but py-numpy doesn't build at >> >> all on sparc64 with this diff, also due to missing blas/cblas symbols: >> > >> > You'll probably see the same on amd64 with USE_LLD=no. >> >> I managed to build scipy with no changes on amd64, so I'm not sure what >> the problem is on this arch (did not try with USE_LLD=No). >> >> However I took a look at the issue reported by tb on sparc64. >> >> --8<-- >> creating /tmp/tmpKcZ0cd/tmp >> creating /tmp/tmpKcZ0cd/tmp/tmpKcZ0cd >> compile options: '-I/usr/local/include -I/usr/include -c' >> cc: /tmp/tmpKcZ0cd/source.c >> cc /tmp/tmpKcZ0cd/tmp/tmpKcZ0cd/source.o -L/usr/local/lib -lcblas -o >> /tmp/tmpKcZ0cd/a.out >> /usr/local/lib/libcblas.so.1.0: undefined reference to `ztbsv_' >> /usr/local/lib/libcblas.so.1.0: undefined reference to `dasum_' >> >> [...] >> >> /usr/local/lib/libcblas.so.1.0: undefined reference to `zsymm_' >> /usr/local/lib/libcblas.so.1.0: undefined reference to `ztrsm_' >> /usr/local/lib/libcblas.so.1.0: undefined reference to `sswap_' >> collect2: error: ld returned 1 exit status >> cc /tmp/tmpKcZ0cd/tmp/tmpKcZ0cd/source.o -L/usr/local/lib -lblas -o >> /tmp/tmpKcZ0cd/a.out >> /tmp/tmpKcZ0cd/tmp/tmpKcZ0cd/source.o: In function `main': >> source.c:(.text.startup+0xdc): undefined reference to `cblas_ddot' >> collect2: error: ld returned 1 exit status >> -->8-- >> >> libcblas.so doesn't depend on libblas.so so missing symbols are to be >> expected if one links with -lcblas instead of -lcblas -lblas. The >> second linking test fails because libblas.so doesn't provide cblas >> symbols. > > Thanks, this makes sense. But why does this work with ld.lld?
ld.lld doesn't bother checking that all symbols in libcblas.so can be resolved, ld.bfd does. This means that if you link against a library that references a bogus symbol or lacks some library interdependency (DT_NEEDED) you only get a crash at run time. On amd64, using the testcase from numpy: --8<-- russell /tmp$ cat r.c #include <cblas.h> int main(int argc, const char *argv[]) { double a[4] = {1,2,3,4}; double b[4] = {5,6,7,8}; return cblas_ddot(4, a, 1, b, 1) > 10; } russell /tmp$ cc -I/usr/local/include r.c -L/usr/local/lib -lcblas russell /tmp$ ./a.out a.out:/usr/local/lib/libcblas.so.1.0: undefined symbol 'ddot_' ld.so: a.out: lazy binding failed! Killed -->8-- I suspect Stuart hit a similar problem with this numpy update and scipy. Using -fuse-ld=bfd in the testcase above would result in the same errors as in your log. >> >> I think the way forward is to make libcblas.so depend on libblas.so >> (this is what you get eg on Debian). It would probably make sense to do >> the same with lapack. >> >> With the following cblas diff I can build py-numpy-1.16.5 on amd64 and >> sparc64. cc'ing Steven. >> >> ok? >> >> >> Index: Makefile >> =================================================================== >> RCS file: /cvs/ports/math/cblas/Makefile,v >> retrieving revision 1.20 >> diff -u -p -r1.20 Makefile >> --- Makefile 12 Jul 2019 20:47:40 -0000 1.20 >> +++ Makefile 10 Mar 2020 16:53:46 -0000 >> @@ -5,8 +5,8 @@ COMMENT= C interface to the BLAS library >> VERSION= 1.0 >> DISTNAME= cblas >> PKGNAME= ${DISTNAME}-${VERSION} >> -REVISION= 6 >> -SHARED_LIBS= cblas 1.0 >> +REVISION= 7 >> +SHARED_LIBS= cblas 1.1 >> >> CATEGORIES= math >> >> Index: files/Makefile >> =================================================================== >> RCS file: /cvs/ports/math/cblas/files/Makefile,v >> retrieving revision 1.1.1.1 >> diff -u -p -r1.1.1.1 Makefile >> --- files/Makefile 2 Oct 2006 21:58:25 -0000 1.1.1.1 >> +++ files/Makefile 10 Mar 2020 16:53:46 -0000 >> @@ -42,5 +42,6 @@ cblas_dgemm.c cblas_sdsdot.c >> cblas_dgemv.c cblas_sgbmv.c cblas_zhemv.c \ >> cblas_dger.c cblas_sgemm.c cblas_zher.c \ >> cblas_dnrm2.c cblas_sgemv.c cblas_zher2.c >> +LDADD=-lblas -lgfortran >> >> .include <bsd.lib.mk> >> Index: pkg/PLIST >> =================================================================== >> RCS file: /cvs/ports/math/cblas/pkg/PLIST,v >> retrieving revision 1.4 >> diff -u -p -r1.4 PLIST >> --- pkg/PLIST 16 Mar 2015 18:07:49 -0000 1.4 >> +++ pkg/PLIST 10 Mar 2020 16:53:46 -0000 >> @@ -1,6 +1,6 @@ >> @comment $OpenBSD: PLIST,v 1.4 2015/03/16 18:07:49 naddy Exp $ >> include/cblas.h >> include/cblas_f77.h >> -lib/libcblas.a >> +@static-lib lib/libcblas.a >> @lib lib/libcblas.so.${LIBcblas_VERSION} >> -lib/libcblas_p.a >> +@static-lib lib/libcblas_p.a >> >> >> -- >> jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE >> > -- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE