【环境信息】
版本:21.03 x86
repo:OS,everything,epol,source
【问题复现步骤】
使用rpmbuild本地编译lapack
【预期结果】
编译成功
【实际结果】
编译失败
【附件信息】
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
问题分析 :
错误提示如下:
/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的添加位置
已验收,编译成功
登录 后才可以发表评论