A Message Is Displayed Indicating That the Library File Is Missing When the KML_LAPACK Library Is Used to Compute the Inverse of a Matrix
Symptom
When the LAPACK library in KML is used to compute the inverse of a matrix, the dpotri_ function is called. The test code is as follows:
1 2 3 4 5 6 7 8 9 10 11 12 | int main() { char uplo = 'L' int n = 4; int lda = n; int info = 0; double a[] = { 231.8009, 33.9545, 9.4143, 11.1156, 33.9495, 162.2902, 6.6684, 53.2033, 9.4143, 6.6684, 100.322, 71.5384, 11.1156, 53.2033, 71.5384, 106.5638 }; dpotri_(&uplo, &n, a, &lda, &info); } |
Dynamic compilation in the scenario where KML_BLAS and KML_LAPACK are used:
gcc test.c -o test -fopenmp -I $KML_LAPACK_ROOT/include/kml-0.3.0 -L /usr/local/kml/lib -lklapack -L $ADAPT_ROOT -l:liblapack_adapt.a -L $KML_BLAS_ROOT -lkblas -lgfortran -lm -lkservice
The compilation failed with the following output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `zgebrd_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `sgerqf_netlib_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `zunmql_netlib_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `dgelqf_netlib_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `csptrf_netlib_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `slasda_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `csytf2_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `clarfy_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `slaed2_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `chptrf_netlib_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `dlartg_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `zgebd2_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `dorgqr_netlib_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `slarfg_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `dlarfy_' /opt/arm/gcc-12.2.0_RHEL-8/binutils_bin/ld: /usr/local/kml/lib/libklapack.so: undefined reference to `sgebd2_' |
The current environment variables are set as follows:
export KML_LAPACK_ROOT=/usr/local/kml/ export KML_BLAS_ROOT=/usr/local/kml/lib/kblas/omp/ export ADAPT_ROOT=/usr/local/kml/lib/kblas/omp/lapack_adapt
Run the ldd command to check the link dependency of libklapack.so.
1 2 3 4 5 6 7 8 | linux-vdso.so.1 (0x0000ffff86341000) libachk.so => /lib/libachk.so (0x0000ffff857dc000) libkservice.so.2.2.0 => /usr/local/kml/lib/libkservice.so.2.2.0 (0x0000ffff857bb000) libc.so.6 => /lib64/libc.so.6 (0x0000ffff85635000) /lib/ld-linux-aarch64.so.1 (0x0000ffff86303000) libdl.so.2 => /lib64/libdl.so.2 (0x0000ffff85614000) libpthread.so.0 => /lib64/libpthread.so.0 (0x0000ffff855df000) librt.so.1 => /lib64/librt.so.1 (0x0000ffff855be000) |
Key Process and Cause Analysis
The LAPACK library in the RPM package of KML is incomplete and must be combined with the open-source Netlib LAPACK to build a full implementation. This issue occurs because Netlib LAPACK was not integrated to generate the complete library.