BLESS的安装---一个问题recompile with -fPIC的解决

article/2025/10/6 16:25:21

BLESS安装方法

首先新建一个目录

mkdir bless_c++
cd bless_c++

然后把源码克隆到本地

git clone https://github.com/thirtyeggs/bless.git

进入目录,执行编译

cd bless
make -j8

编译报错

mpicxx kmc/kmc_api/kmc_file.o kmc/kmc_api/kmer_api.o kmc/kmc_api/mmer.o murmurhash3/MurmurHash3.o check_inputs.o correct_errors.o count_solid_kmers.o main.o parse_args.o -o bless ./boost/lib/libboost_filesystem.a ./boost/lib/libboost_system.a ./boost/lib/libboost_iostreams.a ./zlib/install/lib/libz.a -fopenmp -std=c++11
/usr/bin/ld: ./boost/lib/libboost_filesystem.a(operations.o): relocation R_X86_64_32 against symbol `__pthread_key_create@@GLIBC_2.2.5' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ./boost/lib/libboost_filesystem.a(path.o): relocation R_X86_64_32S against symbol `_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ./boost/lib/libboost_system.a(error_code.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ./boost/lib/libboost_iostreams.a(mapped_file.o): relocation R_X86_64_32S against symbol `_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
Makefile:10: recipe for target 'bless' failed
make: *** [bless] Error 1

进入Makefile文件查看问题

看样子是第十行有点问题

QQ图片20210926193431

他这里说是执行到这一行的时候报错,让我们研究一下这一行具体做了什么

了解过Makefile的同学都知道,这一行实际意思就是将LAFLAGS这些库链接为$(OBJ)也就是bless,应该是整个编译过程比较靠后的位置,使用的编译器为mpicxx,那么这个mpicxx又是何方神圣呢

不妨新开一个终端,在命令行输入一下这个命令

mpicxx --version                                                                       master ✗
g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

查阅资料发现,这个其实就是编译链接使用c++开发的MPI项目,没听说过是干什么的(暴露了知识的贫乏),不过似乎感觉类似于g++

Screenshot from 2021-09-26 21-52-00

官网这里给出了一些参数,输入--help查看一下比较详细的情况

里面有一个pie参数

  -pie                     Create a position independent executable.

立刻想到之前的报错信息

/usr/bin/ld: ./boost/lib/libboost_filesystem.a(operations.o): relocation R_X86_64_32 against symbol `__pthread_key_create@@GLIBC_2.2.5' can not be used when making a PIE object; recompile with -fPIC

查阅资料发现PIE(Position-Independent-Executable)是位置无关的程序,产生的每一条指令,全部使用相对地址,可以被加载到内存的任意位置,就像共享库一样。那么在这个问题中,又是怎么回事呢?

看起来是要加上参数-fPIC,但是仔细一看,却发现真正的原因其实是boost库的问题,也就是那些.a文件不匹配,这些文件既然不匹配,那么推测就不能使用-fPIC参数,所以需要在编译参数中加上-no-pie即可

2

加上后果然正常了,不过发现cd到下面的目录又是相同的错误

Screenshot from 2021-09-26 23-35-35

只需要再次找到出错的Makefile位置即可

cd kmc
vim makefile

0

没有报错!已经正常安装了

试一下看看,成功了!

QQ图片20210926234831


http://chatgpt.dhexx.cn/article/nPDI1jB7.shtml

相关文章

gcc报错 can not be used when making a shared object; recompile with -fPIC

问题1:gcc报错 can not be used when making a shared object; recompile with -fPIC -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全…

WRF——hdf编译报错 recompile with -fPIC

错误: 解决办法:重新编译zlib relocation R_X86_64_32 against .rodata can not be used when making a shared object; recompile with -fPIC 解决方案:以64位的方式重新编译zlib cd zlib CFLAGS"-fPIC" ./configure make …

mysql 存储过程 compile_SQLSERVER临时表导致存储过程重编译(recompile)的一些探讨_MySQL...

SQLSERVER为了确保返回正确的值,或者处于性能上的顾虑,有意不重用缓存在内存里的执行计划,而重新编译执行计划的这种行为,被称为重编译(recompile)。那么引发存储过程重编译的条件有哪一些呢?下面罗列了一些导致重编译…

mysql 存储过程 compile_SQL SERVER 临时表导致存储过程重编译(recompile)的一些探讨_MySQL...

SQLSERVER为了确保返回正确的值,或者处于性能上的顾虑,有意不重用缓存在内存里的执行计划,而重新编译执行计划的这种行为,被称为重编译(recompile)。那么引发存储过程重编译的条件有哪一些呢?下面罗列了一些导致重编译…

Qt recompile with -fPIC

Qt编译时提示: relocation R_X86_64_32 against ‘.rodata’ can not be used when making a PIE object: recompile with fPIC 于是百度, 找了很久找到一篇能够解决我这问题的帖子 在这里面的参考文档中提到,从Ubuntu16.10版本开始默认启用P…

IDEA安装JRebel实现热部署,自动reload和recompile

利用JRebel插件实现代码及时编译功能,帮助我们在开发过程中节省项目重启时间,提高开发效率。JRebel插件实现及时编译,帮助我们在开发过程中节省项目重启时间,提高开发效率。 一、安装 插件安装流程: 1.下载安装JRebel插…

WITH RECOMPILE和OPTION(RECOMPILE)区别

在考虑重编译T-SQL(或者存储过程)的时候,有两种方式可以实现强制重编译(前提是忽略导致重编译的其他因素的情况下,比如重建索引,更新统计信息等等),  一是基于WITH RECOMPILE的存储过程级别重编译,另外一种是基于OPTION(RECOMPILE)的语句级重编译。  之前了解的比较…

内网穿透群晖NAS:实现无公网IP远程访问群晖 2/2

系列文章 内网穿透群晖NAS:免费安装cpolar群晖套件 1/2内网穿透群晖NAS:实现无公网IP远程访问群晖 2/2 上一篇 内网穿透群晖NAS:免费安装cpolar群晖套件 1/2 在上一篇介绍里,我们在群晖系统中成功安装了图形化界面的cpolar&#…

群晖设置公网ipv6方式域名解析访问

1.环境说明 上网:电信光猫tplink路由器(电信送的) 群晖:DSM 7.1.1-42962 Update 2 域名服务商:腾讯云 2.光猫设置 2.1 获取光猫超级用户密码 拨打电信10000号 2.2 修改光猫为桥接模式 略 3.路由器设置 3.1 路由器拨号上网…

群晖 阿里云ddns_群晖QuickConnect功能详解

先来了解下什么是QuickConnect,这是群晖的一个远程访问功能, 有这个功能直接注册一个QuickConnect账号就可以远程访问了, 这样就不需要你的宽带是否有公网ip, 也不需要配置路由器端口映射, 就可以轻松的实现外网访问。 上图的 http://quickconnect.to/vip 外网在电脑浏览器…

IPv6/IPv4 + aliddns 实现黑群晖外网控制和访问

前言 一直想弄台黑群NAS,但因为穷!一直没入,一直用的是玩客云,但玩客云满足不了我的需求,但正好搭上蜗牛星际的车! J19004G内存16G固态4盘位千兆网口才380元,性价比是真的高,再买两…

群晖NAS配置DNSPodDDNS实现外网访问(仅适用于阿里云域名)

创作立场声明:本文只是单纯的经验分享,没有任何恰饭行为!转载前请联系作者授权,并附上此文章链接! 前言 本文将详解如何使用群晖NAS自带的DDNS功能来实现腾讯云DNSPod动态域名解析。 设置你的域名DNS服务器到DNSPod 登录阿里云控制台&…

【宇麦科技】腾xun云登场,群晖NAS自定义域名教程来啦~

如今网盘的使用成本越来越高,更多的人选择搭建自己的家庭 NAS 服务器。 NAS 可以用来做大容量存储、文件备份、文件下载、相册同步,甚至可以搭建网站、搭建自己的笔记以及邮件服务。 NAS 一般都安装在家里,那么出门在外应该如何远程访问家里的…

群晖NAS的公网、NAT、DDNS、证书等配置一

一、群辉NAS应用场景 你是否有过这样的需求? 1. 远程办公 日常的工作资料太多太杂乱,换个电脑根本没法工作?团队间资料共享太麻烦?Drive套件这个远程办公神器都能解决。 我的文件相当于远程的“我的文档”,“团队文件”是可以与团队成员共享。在PC端和手机端都可以方便…

群晖NAS教程(二十一)、利用Docker安装DDNS动态域名解析,自动更新域名解析到公网IP(支持阿里云、腾讯云dnspod、Cloudflare、华为云)

群晖NAS教程(二十一)、利用Docker安装DDNS动态域名解析,自动更新域名解析到公网IP(支持阿里云、腾讯云dnspod、Cloudflare、华为云) 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 一、下载镜像与配置启动参数 在群…

群晖外网访问终极解决方法:IPV6+阿里云ddns+ddnsto

写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法,这是后发现移动没有公网IP,只有ipv6(公网的),时候有小伙伴要问,要是没有ipv6就没办法访问群晖了吗? 不&…

群辉默认DDNS功能解析阿里云-自定义服务商

前言 前不久买了个群辉NAS发现群辉DDNS不能解析阿里云,后来找了很多教程都是部署Docker或使用其他平台转发一下,然而这些平台还要注册,我就在想我自己可不可以实现不需要注册就可以使用的DDNS,毕竟咱也是干这个的。 然后我就去上…

一文搞懂“如何通过群晖+DNSPod DDNS搭建私有云服务?”

DNSPod春节特惠3折起 买解析就送CDN,最高60TB CDN让你带回家 👉🏻购买入口 近期很多DIY私有云玩家私聊D妹“我想在外网访问家庭网络,怎么搞?”,“如何将动态IP映射到一个固定的域名解析服务上?”…

[NAS] Synology (群晖) DSM7.0 使用自定义供应商DDNS

简介 找了很多教程都是部署Docker或使用其他平台转发一下,然而这些平台还要注册, 实际阿里云是有阿里云OpenSDK 可以支持的,本来想自己写了一个,后面发现有人已经实现了, 就用了一个开发者的DDNS服务, https://ddns.bkood.com/, 在这里非常感…

群晖设置腾讯云ddns显示认证失败的两种解决办法【实测第二种成功了】

群晖腾讯云ddns显示认证失败 背景:问题:前提条件解决办法一:群晖自带的ddns解析步骤1:获取 API 密钥信息步骤2:群晖(Synology)NAS 配置 DDNS 解决办法二:利用Docker安装DDNS动态域名…