ViennaRNA的安装使用

文章目录

    • 安装最新版
      • 下载最新版:
      • 解压并且安装(官网安装)
      • 报错并相关的解决方法:
        • 存在perl的问题,利用conda 安装新的perl,不用系统自身的。
      • 编译的时候strings.h文件中的strdup函数声明冲突。
      • 找不到链接器(ld)找不到系统上的LAPACK库(-llapack)
        • 综上所有错误,提供的最终的解决措施
    • 总结

安装最新版

可以在github链接找到最新版本,结下来我会以安装最新版,作为例子进行介绍

下载最新版:

https://github.com/ViennaRNA/ViennaRNA/releases/download/v2.6.4/ViennaRNA-2.6.4.tar.gz

解压并且安装(官网安装)

tar -zxvf ViennaRNA-2.6.4.tar.gz
cd ViennaRNA-2.6.4
./configure --prefix=/home/xxx/ViennaRNA-2.6.4
make install

报错并相关的解决方法:

存在perl的问题,利用conda 安装新的perl,不用系统自身的。

问题类似这个blog:blog

conda install -c conda-forge perl

编译的时候strings.h文件中的strdup函数声明冲突。

问题:
make[1]: Entering directory /home/xxxx/ViennaRNA-2.6.4/src/RNAxplorer' Making install in src make[2]: Entering directory /home/xxxx/ViennaRNA-2.6.4/src/RNAxplorer/src’
CC RNAxplorer_cmdl.o
CC RNAxplorer.o
In file included from /usr/include/string.h:633,
from RNAxplorer.c:3:
…/…/…/src/ViennaRNA/utils/strings.h:64:1: error: expected identifier or ‘(’ before ‘extension
strdup(const char *s);
^~~~~~
make[2]: *** [RNAxplorer.o] Error 1

解释:
这个错误信息表明在编译ViennaRNA包的RNAxplorer部分时遇到了问题。错误是由于strings.h文件中的strdup函数声明冲突。在包含了系统的string.h头文件之后,strdup的声明与ViennaRNA包自己的strings.h中的声明发生了冲突。

这可能是因为strdup是一个标准的库函数,而在某些系统中,比如GNU libc,它是非标准的扩展,可能会被条件编译指令保护起来。
因此:
检查ViennaRNA的strings.h是否有条件编译指令来防止与标准库的strdup冲突。

1。 找到strings.h文件的位置。如果您已经知道ViennaRNA的安装目录,您可以在其中搜索该文件。2。 打开strings.h文件并查看文件内容。您可以使用文本编辑器打开它,例如:
vim /path/to/ViennaRNA/src/ViennaRNA/utils/strings.h3。在文件中查找strdup相关的定义和声明。特别是寻找#ifdef或#ifndef预处理器指令,这些指令可能用来检查某个宏是否已定义,以决定是否需要声明strdup。例如:
#ifndef HAVE_STRDUP
char *
strdup(const char *s);
#endif
分析原因:
既然strings.h中的strdup函数是用条件编译宏#ifndef HAVE_STRDUP包围的,这意味着如果HAVE_STRDUP没有在编译前定义,ViennaRNA就会尝试自己声明strdup函数。这通常会导致和系统的string.h头文件中的声明冲突。4。 解决办法:
添加编译选项:
如果您直接使用make来编译ViennaRNA,可以尝试在make命令中添加CFLAGS:
make CFLAGS='-DHAVE_STRDUP'
这会将HAVE_STRDUP定义传递给编译器。

找不到链接器(ld)找不到系统上的LAPACK库(-llapack)

1) 首先利用conda 安装

conda install -c conda-forge liblapack

2)需要将包含LAPACK库的目录添加到您的LD_LIBRARY_PATH环境变量中

export LD_LIBRARY_PATH=/home/xxxx/condaenvs/xxxx/lib:$LD_LIBRARY_PATH就是将下面两个文件放入LD_LIBRARY_PATH中:
原因:
liblapack.so 和 liblapack.so.3 是LAPACK库在Linux系统中的共享库文件。共享库(或动态链接库)是一种包含可以被其他程序调用的代码和数据的文件。在这种情况下,LAPACK库的功能被封装在这些共享库文件中,以便其他程序可以在运行时链接和使用它们。在Linux系统中,共享库文件通常有以下几种类型:.so 文件:这是一个“共享对象”(shared object)文件,它是在编译时用于动态链接的文件。
版本化的 .so 文件:例如 liblapack.so.3,这表示库的特定版本,确保软件链接到正确的库版本。这样可以防止软件更新后因为库版本不兼容而产生问题。
当链接器在编译过程中发出错误,提示找不到 -llapack 时,它通常是在寻找名为 liblapack.so 的文件。如果您已经有了这些文件,那么您可能需要确保它们位于链接器查找共享库的路径上,或者在编译时指定它们的位置。如果这些文件不在标准的库路径下,您可以:使用 -L 选项在编译时指定库的路径。
将库的路径添加到 LD_LIBRARY_PATH 环境变量中。
配置 /etc/ld.so.conf 或 /etc/ld.so.conf.d/ 中的文件,然后运行 ldconfig 来更新运行时链接器的配置。

但是好像还是会出现相同的错误当重新make install

ldconfig -p | grep lapack
如果运行 ldconfig -p | grep lapack 没有任何输出,说明 liblapack.so 没有在系统的链接器缓存中注册。这可能是因为:
1. LAPACK库没有安装在标准库路径:系统链接器可能只会自动扫描某些标准路径(如 /lib, /usr/lib, /usr/local/lib),如果LAPACK库不在这些路径中,链接器就不会自动找到它。
2. /etc/ld.so.conf 和 /etc/ld.so.conf.d/ 没有正确配置:这些文件控制了链接器应该扫描哪些路径。如果您将库安装在非标准路径,您需要将该路径添加到这些配置文件中,然后运行 sudo ldconfig 来更新链接器的缓存。3. 运行 ldconfig 需要管理员权限:更新系统链接器缓存通常需要管理员权限。确保您使用 sudo ldconfig 来刷新缓存。
综上所有错误,提供的最终的解决措施

在使用 ./configure 脚本配置源代码包时,您可以通过设置环境变量 LDFLAGS 来指定链接器应该在哪里查找库文件。LDFLAGS 可以用来添加链接器的选项,-L 用于添加库的搜索路径,-Wl,-rpath 用于设置运行时的库搜索路径。

以下是如何在 ./configure 命令中指定库路径的步骤:
1。 设置 LDFLAGS:

LDFLAGS="-L/home/xxxx/condaenvs/xxxxx/lib -Wl,-rpath,/home/xxxx/condaenvs/xxxx/lib"

2。运行 ./configure:

./configure LDFLAGS="$LDFLAGS" --prefix=/home/xxxx/ViennaRNA-2.6.4

3。编译并安装:

make CFLAGS='-DHAVE_STRDUP'
make install

确保在运行 ./configure 命令之前,已经设置了 LDFLAGS 环境变量,并且包含了LAPACK库的正确路径。

successfully!!!
所有可执行文件都在:
/home/xxxx/ViennaRNA-2.6.4/bin

总结

一般需要编译的时候,可以先安装conda环境,安装gcc/g++,安装perl等重要信息.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Uniapp Vue3 基础知识点附带实例

包括数据绑定和计算属性、条件渲染和列表渲染、事件处理、表单输入处理、生命周期钩子、自定义指令和过滤器、路由和导航以及状态管理&#xff08;如Vuex&#xff09;&#xff1a; <template><div><!-- 条件渲染 --><div v-if"showMessage">…

oracle的debjob挂載及查詢

背景 有一個需求需要定時去執行一個produce&#xff0c;可以使用oracle的dbjob定時執行&#xff0c;相比較之前的vbs更加絲滑 --傳遞produce 開始的時間 頻率 declarea number;beginDBMS_JOB.SUBMIT(a,xx_warehouse_daliy_record_p;,to_date(202311230800,yyyymmddhh24mi),…

BART 并行成像重建:ESPIRiT 重建(两组ESPIRiT maps)

本文主要比较使用两组ESPIRiT map进行重建和传统SENSE 重建的结果。 目录 1 SNESE重建 (使用 coil sensitivity mp) 2 ESPIRiT 重建 (使用两组ESPIRiT maps) 3 两种重建结果展示 4 结论

illuminate/database 使用 四

文档&#xff1a;Hyperf Database: Getting Started - Laravel 10.x - The PHP Framework For Web Artisans 因为hyperf使用illuminate/database&#xff0c;所以按照文章&#xff0c;看illuminate/database代码实现。 一、读写分离 根据文档读写的host可以分开。设置读写分…

管理类联考——写作——考点+记忆篇——论证有效性分析——记忆

文章目录 论证有效性分析得分要点、寻找漏洞方法论证有效性分析五大逻辑漏洞类型论证有效性分析的具体写法论证有效性分析十大解题思路&#xff08;上&#xff09;方法一&#xff1a;理想法方法二&#xff1a;极端法方法三&#xff1a;其他因素法方法四&#xff1a;可行性法 论…

Everything进行内网穿透搜索

文章目录 1\. 部署内网穿透1.1. 注册账号1.2. 登录1.3. 创建隧道 2\. 从外网访问Everything 借助cpolar可以让我们在公网上访问到本地的电脑 1. 部署内网穿透 1.1. 注册账号 在使用之前需要先进行注册cpolar cpolar secure introspectable tunnels to localhost 1.2. 登录 C…

grdle 的安装与配置 、gradle和jdk版本对应关系

java与gradle对应的版本关系 Java Java Gradle需要Java版本在8到19之间。目前还不支持Java 20及更高版本。 Java 6和Java 7仍然可以用于编译&#xff0c;但已经不适合用于测试。Gradle 9.0不支持Java 6和Java 7的测试。任何完全支持的Java版本都可以用于编译或测试。 然而&…

Ubuntu下使用protoBuf

一、protobuf简介&#xff1a; 1.1 protobuf的定义&#xff1a; protobuf是用来干嘛的&#xff1f; protobuf是一种用于 对结构数据进行序列化的工具&#xff0c;从而实现 数据存储和交换。 &#xff08;主要用于网络通信中 收发两端进行消息交互。所谓的“结构数据”是指类…

编程常见报错信息及解决方案汇总

编程常见报错信息及解决方案汇总 1.Java语言编程 1.1 jdk相关 Java API java8帮助文档 Java最新JDK和API下载&#xff08;持续同步更新于官网&#xff09; jdk1.8.0_212 全平台下载 官网下载JDK1.7的方法和步骤 力扣 (LeetCode) PTA题库 1.2 编程工具Eclipse Eclips…

【STM32】GPIO输出

1 GPIO简介 &#xff08;1&#xff09;GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 &#xff08;2&#xff09;可配置为8种输入输出模式 &#xff08;3&#xff09;引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V&#xff08;可以输…

【LeetCode】挑战100天 Day15(热题+面试经典150题)

【LeetCode】挑战100天 Day15&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-172.1 题目2.2 题解 三、面试经典 150 题-173.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&…

聊聊看番的经历

我本来是不看番的。 直到高一上的一个周末&#xff0c;在 Polaris 的强烈推荐下&#xff0c;我看了《Lycoris》&#xff0c;一个美少女战斗番。故事的情节比较简单&#xff0c;并且只有13集&#xff0c;我两个周末就看完了&#xff0c;最后是大团圆结局&#xff0c;非常开心。 …

Debezium日常分享系列之:Debezium 2.4.1.Final发布

Debezium日常分享系列之&#xff1a;Debezium 2.4.1.Final发布 一、Debezium Operator - 指定镜像拉取秘密二、Debezium Operator - 指定容器资源三、Debezium Operator 指标端点改进 从最新的 Debezium 2.5 开发系列中向后移植了一些新功能。所有这些新功能都集中在 Kubernete…

QQ空间上传一次 500张限制突破记录

手机又好多照片了&#xff0c;用手机上传耽误时间&#xff0c;就导出到电脑了&#xff0c;上传到qq空间去。 结果发现不开通黄钻无法上传原图&#xff0c;那就开通吧&#xff01; 开通了黄钻&#xff0c;居然不能一次上传超过 500 张&#xff0c;开通有何用&#xff1f; 五千…

电磁场信息论及先进MIMO (黄大年茶思屋座谈) 笔记

天线阵的负载动态调控&#xff0c;动态阻抗匹配网络&#xff0c;实时跟着扫描角度的变化而变化&#xff0c;可能突破Hannan极限。 新的天线构架&#xff1a; 周期 —》非周期 每个单元不一样 动态可调&#xff0c;可重构 每个天线多端口或多模式 多层天线 非周期结构天线的增…

vscode导入STM32CubeIDE工程文件夹未定义警告清除方法

0 前言 在我们使用vscode去编辑STM32CubeIDE的工程文件时&#xff0c;经常会出现一些类型未定义、头文件路径无效的问题&#xff0c;无法正常使用且非常影响观感。本文介绍如何设置vscode导入的STM32CubeIDE配置文件&#xff0c;解决这一问题。 1 vscode导入STM32CubeIDE工程…

从0到0.01入门 Webpack| 003.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

rocky8.9配置K8S集群kubernetes,centos同理

rocky8.9配置K8S集群 节点主机名IP地址mastertang1192.168.211.101node1tang2192.168.211.102node2tang3192.168.211.103 1&#xff09;准备工作 全部主机都配置静态ip vi /etc/sysconfig/network-scriptsTYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic DE…

【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析模拟实现

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…

Docker Remote API 使用详解

文章目录 1.容器相关1.1 列出所有容器1.2 创建新容器1.3 检查容器1.4 启动容器1.5 停止容器1.6 重启容器1.8 删除容器1.14 根据资源使用情况获取容器统计信息1.16 获取容器日志 2.镜像相关2.1 获取镜像清单2.2 构建镜像2.4 检查镜像2.5 获取镜像的历史记录2.6 标记一个镜像2.8 …