You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 16.04.4安装CBLAS遇ranlib文件格式识别错误

解决Ubuntu 16.04.4上CBLAS编译时ranlib格式错误的问题

嘿,我看到你在编译CBLAS时碰到了ranlib: /home/ubuntu/CBLAS/lib/cblas_LINUX.a: File format not recognized这个头疼的错误,咱们一步步来排查解决:

1. 先确认依赖的BLAS库是否正常

CBLAS是基于BLAS的包装库,所以首先得确保你指定的BLLIB = /home/ubuntu/BLAS-3.8.0/blas_LINUX.a是个完整有效的静态库:

  • 切换到BLAS目录:cd /home/ubuntu/BLAS-3.8.0
  • 先清理之前的编译残留:make clean
  • 重新编译BLAS:make
  • 验证生成的库文件:执行file blas_LINUX.a,正常输出应该是类似blas_LINUX.a: current ar archive。如果显示不是归档文件,说明BLAS编译失败了——这种情况先检查依赖是否装全,Ubuntu 16.04下可以跑sudo apt-get install build-essential gfortran补全编译工具链。

2. 检查CBLAS的目标库文件状态

错误里的cblas_LINUX.a大概率是没生成、生成不完整或者是个空文件:

  • 切换到CBLAS目录:cd /home/ubuntu/CBLAS
  • 先彻底清理旧编译文件:make clean
  • 确认lib目录存在,没有的话手动创建:mkdir -p lib
  • 核对Makefile.in里的CBLIB路径,你设置的/home/ubuntu/CBLAS/lib/cblas_LINUX.a是对的,但要确保编译过程能写入这个目录(权限没问题的话就不用管)。

3. 修正Makefile.in里的归档工具参数

我注意到你设置了ARCH = gccARCHFLAGS = -shared -o,这是个关键问题:

  • gcc是C编译器,而创建静态库.a需要用归档工具ar,所以把ARCH改成ar
  • ARCHFLAGS = -shared -o是生成动态库.so的参数,静态库需要用cr参数来创建归档,所以调整这两个参数:
    ARCH = ar
    ARCHFLAGS = cr
    RANLIB = ranlib
    
    这样ar会创建静态库,之后ranlib才能正确索引它。

4. 重新编译CBLAS

做完上面的调整后,执行make重新编译。如果还是报错,仔细看编译过程中更早的输出——很多时候这种格式错误是前面某个源文件编译失败,导致生成的.a文件不完整,把那些具体的编译错误信息找出来就能定位问题。

另外提一句,Ubuntu 16.04其实有预编译的CBLAS包,如果你不想折腾手动编译,直接跑sudo apt-get install libcblas-dev就能一键安装,省心又不容易出错。

内容的提问来源于stack exchange,提问作者Vasanti

火山引擎 最新活动