我正在尝试构建一个 .so 以便在运行时动态链接到 lapack 和 blas。构建时,链接器抱怨找不到 lapack 和 blas,但我正指向它们(我认为)。我还缺少什么?
我在 Rocky 9 Linux 系统上(全新安装)。除其他外,我做了
yum install gcc-gfortran lapack-3.9.0-8.el9.x86_64 compat-libgfortran-48-4.8.5-36.5.el9.x86_64 openblas-serial lapack scalapack-common
和yum groupinstall "Development tools"
。其中一些是为了(成功地)让旧的二进制文件再次工作,但我将它们包括在内以防它们现在可能会产生干扰。使用 yum list
,我看不到任何其他有希望安装的东西。
在
/usr/lib64/
我看到(除其他外):
lrwxrwxrwx. 1 root root 18 May 25 2022 liblapack.so.3.9 -> liblapack.so.3.9.0*
lrwxrwxrwx. 1 root root 19 May 25 2022 liblapacke.so.3.9 -> liblapacke.so.3.9.0*
lrwxrwxrwx. 1 root root 19 May 25 2022 liblapacke.so.3 -> liblapacke.so.3.9.0*
-rwxr-xr-x. 1 root root 7496688 May 25 2022 liblapack.so.3.9.0*
-rwxr-xr-x. 1 root root 2908088 May 25 2022 liblapacke.so.3.9.0*
lrwxrwxrwx. 1 root root 18 Jan 18 16:18 liblapack.so.3 -> liblapack.so.3.9.0*
lrwxrwxrwx. 1 root root 22 May 16 2022 libopenblas.so.0 -> libopenblas-r0.3.15.so*
lrwxrwxrwx. 1 root root 23 May 16 2022 libopenblaso.so.0 -> libopenblaso-r0.3.15.so*
-rwxr-xr-x. 1 root root 38111888 May 16 2022 libopenblas-r0.3.15.so*
-rwxr-xr-x. 1 root root 39653512 May 16 2022 libopenblaso-r0.3.15.so*
lrwxrwxrwx. 1 root root 17 May 25 2022 libcblas.so.3.9 -> libcblas.so.3.9.0*
lrwxrwxrwx. 1 root root 16 May 25 2022 libblas.so.3.9 -> libblas.so.3.9.0*
-rwxr-xr-x. 1 root root 119640 May 25 2022 libcblas.so.3.9.0*
-rwxr-xr-x. 1 root root 583120 May 25 2022 libblas.so.3.9.0*
lrwxrwxrwx. 1 root root 19 Jun 2 2022 libflexiblas.so.3 -> libflexiblas.so.3.0*
lrwxrwxrwx. 1 root root 24 Jun 2 2022 libflexiblas_mgmt.so.3 -> libflexiblas_mgmt.so.3.0*
lrwxrwxrwx. 1 root root 23 Jun 2 2022 libflexiblas_api.so.3 -> libflexiblas_api.so.3.0*
-rwxr-xr-x. 1 root root 3870704 Jun 2 2022 libflexiblas.so.3.0*
-rwxr-xr-x. 1 root root 53256 Jun 2 2022 libflexiblas_mgmt.so.3.0*
-rwxr-xr-x. 1 root root 15912 Jun 2 2022 libflexiblas_api.so.3.0*
lrwxrwxrwx. 1 root root 17 Jan 18 16:18 libcblas.so.3 -> libcblas.so.3.9.0*
lrwxrwxrwx. 1 root root 16 Jan 18 16:18 libblas.so.3 -> libblas.so.3.9.0*
此外,
whereis liblapack.so
和whereis libblas.so
都空手而归
按照我看到的here,我做了:
gcc -Wall -fPIC -O -g -fopenmp mylib.c -c -o mylib.pic.o
gcc -shared -fopenmp mylib.pic.o -L/usr/lib64 -lblas -llapack -lm -o mylib.so
但我明白了
/usr/bin/ld: cannot find -lblas
/usr/bin/ld: cannot find -llapack
collect2: error: ld returned 1 exit status
我知道this,但我必须进入系统目录并手动创建软链接才能使用标准基础设施,这似乎是错误的。必须有一个“正确”的解决方案我错过了。
感谢您的帮助。
我正指向他们(我认为)。
不,你不是。你需要
libblas.so
,这和libblas.so.3
不一样。
libblas.so
需要将新的二进制文件链接到 libblas
。 libblas.so.3
需要run 已经链接的二进制文件。
通常
.so
库作为 libblas-devel
或类似包的一部分安装。