Closed adamjstewart closed 5 years ago
@adamjstewart It looks like all of the undefined symbols in your output are those found in the BLAS. libflame does not try to provide BLAS (at least not by default).
As for the library not being executable, are you referring to the execution bit of the user's file permissions? As in, the third character in rwxrwxrwx
?
A follow-up on the execution bit issue. I can't seem to reproduce it:
$ ./configure --enable-lapack2flame --enable-static-build --enable-dynamic-build --disable-debug --enable-multithreading=no --disable-supermatrix --enable-max-arg-list-hack
$ make -j5
$ ls -l lib/x86_64-unknown-linux-gnu/
total 40900
-rw-r--r-- 1 field dept 26519656 Sep 23 14:10 libflame.a
-rwxr-xr-x 1 field dept 15183376 Sep 23 14:10 libflame.so
lrwxrwxrwx 1 field dept 11 Sep 23 14:10 libflame.so.1 -> libflame.so
Notice that libflame.so
has execute privileges (for user, group, and other).
@fgvanzee Yes, I'm referring to the execution bit. Here are the permissions when I build the master branch:
$ ls -l lib
total 38M
-rw-r--r-- 1 adamjs5 19fa-astr510-eng 24M Sep 18 22:48 libflame.a
lrwxrwxrwx 1 adamjs5 19fa-astr510-eng 17 Sep 18 22:48 libflame.so -> libflame.so.1.0.0
lrwxrwxrwx 1 adamjs5 19fa-astr510-eng 17 Sep 18 22:48 libflame.so.1 -> libflame.so.1.0.0
-rw-r--r-- 1 adamjs5 19fa-astr510-eng 14M Sep 18 22:48 libflame.so.1.0.0
Are you saying that libflame
should be built with blas
as a dependency, or that it's perfectly normal (and expected) for the library to be missing symbols? I'm trying to build NumPy with common BLAS/LAPACK providers and I'm wondering if NumPy built with only libflame (no BLAS) should work or not.
Hmm, I wasn't installing libflame previously. Once I install it, I see what you mean. So I'll look into that and get back to you.
As for the BLAS dependency: yes, libflame (under normal circumstances) depends on a BLAS library.
@adamjstewart Okay, I've committed 4356779, which will hopefully fix your issue with missing execute bits at install-time.
@fgvanzee That does indeed solve the execute bit problem!
I tried adding a dependency on BLAS, but I still see those undefined symbols, even when I build with RPATH and set LD_LIBRARY_PATH. I tried both BLIS and OpenBLAS.
For the record, I can build NumPy with BLIS + libflame without any issues. All unit tests pass, and the resulting libraries are linked correctly. I'm still curious why libflame shows all those undefined symbols, but I only needed it for NumPy.
For the record, I can build NumPy with BLIS + libflame without any issues. All unit tests pass, and the resulting libraries are linked correctly. I'm still curious why libflame shows all those undefined symbols, but I only needed it for NumPy.
So in the end, you are able to link what you wanted to link? If so, then great; please close this issue at your convenience.
The undefined symbols are likely the result of the fact that we don't make the linker aware that libflame has a secondary dependency on a BLAS library [1]. The reason for this is mostly because there is no standard name for BLAS libraries (e.g. libblas.so
). Since the names can vary by implementation (libblas.so
, libopenblas.so
, libblis.so
, libwhatever.so
), we can't predict which secondary dependency to name at shared library link-time. (Basically, the convention is that we require the user to choose how to satisfy the secondary dependency.)
Thanks, let me try adding something like LIBS=-lblis
to the build.
LIBS=-lblis
did indeed solve the issue! Thanks for all of your help.
Thanks, let me try adding something like
LIBS=-lblis
to the build.
Where? How?
@surak I added it to the configure line:
$ ./configure LIBS=-lblis ...
If you use a different BLAS library other than BLIS, you'll need to add the link flag for that specific library.
When I try to build either the 5.2.0 release or the master branch on CentOS 7 with either GCC 7.2.0 or Intel 18.0.1, the installation completes, but the resulting library is missing dozens of symbols. The library is also not executable.
I'm passing the following options to
configure
:For additional info, see: