You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 18.04+GCC 7.3.0下链接BLAS库遇重定位错误求助

解决Ubuntu 18.04 + GCC 7.3.0下链接BLAS库的重定位错误问题

这个问题本质是Ubuntu 18.04开始GCC默认启用了PIE(位置无关可执行文件)编译模式,而你之前的编译流程没有适配这个变化导致的。

问题原因

PIE是一种系统安全特性,要求生成的可执行文件是位置无关的,以此降低恶意代码利用内存地址漏洞的风险。但你的benchmark.o和mine.o目标文件要么是在旧环境下编译的,要么编译时没添加位置无关参数,它们包含32位重定位信息,无法和PIE模式的链接流程兼容,所以触发了relocation R_X86_64_32 against '.bss' can not be used when making a PIE object的错误。

两种可行解决方案

  • 方案一:重新编译源文件时添加位置无关参数
    对所有源文件编译时加上-fPIC参数,生成支持PIE的目标文件:

    g++ -c -fPIC benchmark.cpp mine.cpp
    

    之后再用原来的链接命令(或者直接合并编译与链接步骤):

    g++ -o output benchmark.o mine.o -lcblas
    
  • 方案二:链接时禁用PIE模式
    如果不想修改编译步骤,可以直接在链接命令中添加-no-pie参数,强制关闭PIE要求:

    g++ -o output benchmark.o mine.o -lcblas -no-pie
    

额外建议

优先推荐方案一,因为PIE是现代Linux系统的默认安全配置,保持启用能提升程序的安全性。只有当依赖旧代码或无法修改的第三方库时,再考虑用方案二绕过PIE限制。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:49:45