113 Star 0 Fork 20

src-openEuler / lapack

 / 详情

【21.03】本地编译lapack失败

已完成
缺陷
创建于  
2021-03-18 09:30

【环境信息】
版本:21.03 x86
repo:OS,everything,epol,source
【问题复现步骤】
使用rpmbuild本地编译lapack
【预期结果】
编译成功
【实际结果】
编译失败
【附件信息】
输入图片说明

附件
log.tar(2.19 MB)下载
zengcw 2021-03-18 09:29

评论 (3)

zengcw 创建了缺陷
zengcw 负责人设置为small_leek
zengcw 里程碑设置为openEuler 21.03-RC3
zengcw 计划开始日期设置为2021-03-18
zengcw 计划截止日期设置为2021-03-20
zengcw 关联仓库设置为src-openEuler/lapack
zengcw 修改了描述
展开全部操作日志
陈亚强 任务状态待办的 修改为已完成
maminjie 任务状态已完成 修改为待办的

问题分析
错误提示如下:
/usr/bin/ld: shared/lapacke_xerbla.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
添加-fPIC参数,重新编译……

查看编译日志,发现确实没有加-fPIC:
make[1]: Entering directory '/builddir/build/BUILD/lapack-3.9.0/LAPACKE/utils'
gcc -O3 -I../include -c -o lapacke_xerbla.o lapacke_xerbla.c
make[1]: Leaving directory '/builddir/build/BUILD/lapack-3.9.0/LAPACKE/utils'
……

查看spec发现,实际上是加了-fPIC:

cp -f make.inc.example make.inc
sed -i "s|librefblas.a|libblas.a|g" make.inc
sed -i '36iCFLAGS+= -fstack-protector-strong -fPIC' LAPACKE/utils/Makefile
sed -i '40iCFLAGS+= -fstack-protector-strong -fPIC' LAPACKE/src/Makefile

有一种可能就是添加的位置不对,查看LAPACK/utils/Makefile如下:

 33 # makefile for LAPACKE, used to build lapacke binary.
 34 #
 35 TOPSRCDIR = ../..
 36 include $(TOPSRCDIR)/make.inc
 37 
 38 .SUFFIXES: .c .o
 39 .c.o:
 40     $(CC) $(CFLAGS) -I../include -c -o $@ $<
 41 
 42 OBJ = lapacke_cgb_nancheck.o \
 43       lapacke_cgb_trans.o \
 44       lapacke_cge_nancheck.o \
 45       lapacke_cge_trans.o \
 46       lapacke_cgg_nancheck.o \
"LAPACKE/utils/Makefile" 202 lines --16%--

在36行前面添加CFLAGS+=……,36行包含make.in之后会覆盖CFLAGS,导致添加的-fPIC无效

解决方法
spec中调整-fPIC的添加位置

已验收,编译成功
enter image description here

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(4)
5603730 yaqiangchen 1607954772 7818392 meitingli 1654830044
1
https://gitee.com/src-openeuler/lapack.git
git@gitee.com:src-openeuler/lapack.git
src-openeuler
lapack
lapack

搜索帮助