赞
踩
本文主要是在学习linux过程中,小白的进阶过程,中间学习到的内容进行以下总结
—`
链接: 参考链接,下面进行简要摘抄
大白话的讲,就是负责“翻译”或“解释”代码的一个软件!
比如C语言、C++、Java这样的程序,当我们一行一行写下代码后,需要经过编译器的“翻译”才能变成可执行程序才可以执行。才可以实现代码到程序的转变,而这一切都需要编译器帮我们去做。
那么问题来了,我们学编程,比如C语言,又是32个关键字、又是各种函数,还有各种语法,学这些不就为了写代码让电脑执行吗?为什么还要编译器“翻译”呢? 答案很简单,因为:电脑(其实主要就是CPU)只认识0或1这两个数字。所有写的一切代码,都需要编译器帮我们编译也就是翻译成大量的01代码,才是CPU的“母语”,CPU才会熟练的帮我们飞一般的帮速度执行。
那么你可能又会问,既然CPU只认识0和1,反正也要翻译一遍,那我们还学什么编程,学什么语法,直接用汉语写命令写代码不行吗?答案是:当然可以,比如易语言,或号称一句话就可以完成一个功能的swift语言等等。无论哪种语言,想要最终成为可执行的程序,都需要编译器帮我们去编译才可以实现! 无非是语言的高级与否,影响编译器翻译量多少而已!
以C语言为例,常见的编译器有:
Windows系统下VC/VS系列编译器为cl.exe
Linux系统下原生自带的gcc编译器
Max系统下的LLVM/CLANG编译器
这些编译器的使用方式常常在DOS或命令提示符下,通过一步步的命令进行操作,需要经过编译、链接才会生成对应的可执行文件
链接: 参考原文
链接: [参考引文](https://www.cnblogs.com/qqcwannagraduate/p/4641067.html)
https://www.cnblogs.com/panfeng412/archive/2011/10/20/library_path-and-ld_library_path.html
)
Linux系统glibc和 GLIBCXX库版本信息查看
理清gcc、glibc、libstdc++的关系
glibc是gnu发布的libc库,也即c运行库。glibc是linux 系统中最底层的api(应用程序开发接口),几乎其它任何的运行库都会倚赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本 身也提供了许多其它一些必要功能服务的实现,
[xxx@xxxx]$ strings /usr/lib64/libstdc++.so.6 |grep GLIBCX GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17 GLIBCXX_3.4.18 GLIBCXX_3.4.19 GLIBCXX_DEBUG_MESSAGE_LENGTH
分析结果,发现确实没有GLIBCXX_3.4.20 和GLIBCXX_3.4.21;因为该计算节点环境下链接的动态库版本太低;
之前在linux的登陆节点上进行测试发现存在,20和21 ,只能说链接的库存在问题
问题是,在计算节点 不能使用系统的gcc,所以只能在conda下重新安装gcc,之后进行运行程序利用该env下的gcc
[xxx@ln01 ~]$ strings /usr/lib64/libstdc++.so.6 |grep GLIBCX GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17 GLIBCXX_3.4.18 GLIBCXX_3.4.19 GLIBCXX_3.4.20 GLIBCXX_3.4.21 GLIBCXX_3.4.22 GLIBCXX_3.4.23 GLIBCXX_3.4.24 GLIBCXX_3.4.25 GLIBCXX_3.4.26 GLIBCXX_DEBUG_MESSAGE_LENGTH
1、创建conda虚拟环境(已有的话,直接激活/切换即可) conda create -n gcc_test 2、激活conda 虚拟环境 conda activate gcc_test 3、安装gcc conda install -c conda-forge gcc(全部yes) 4、查看gcc版本 gcc --version (gcc_test) [xxxx@cu01 bin]$ gcc --version gcc (conda-forge gcc 12.1.0-16) 12.1.0 Copyright (C) 2022 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. (gcc_test) [xxxx@cu01 bin]$ which gcc #显示gcc 在env /deepfoldrna/bin中,所以链接的库应该在bin的同一目录下,及lib文件夹下 ~/DeepFoldRNA/conda_local/conda/envs/deepfoldrna/bin/gcc 5、查看lib下的动态链接库 (gcc_test) [xxxx@cu01 lib的上一层目录]$ strings lib/libstdc++.so.6 |grep GLIBCX GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17 GLIBCXX_3.4.18 GLIBCXX_3.4.19 GLIBCXX_3.4.20 GLIBCXX_3.4.21 GLIBCXX_3.4.22 GLIBCXX_3.4.23 GLIBCXX_3.4.24 GLIBCXX_3.4.25 GLIBCXX_3.4.26 GLIBCXX_3.4.27 GLIBCXX_3.4.28 GLIBCXX_3.4.29 GLIBCXX_3.4.30 GLIBCXX_DEBUG_MESSAGE_LENGTH _ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4 _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv@@GLIBCXX_3.4.5 _ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@GLIBCXX_3.4 _ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv@@GLIBCXX_3.4.5 6、可以发现存在版本20和21 ,目前就是执行程序的时候使使用环境中gcc,而非系统的gcc ===发现其实在gcc_test的环境下查看gcc是新下载的gcc 查看环境变量也可以发现环境变量存在(gcc_test) [xxxx@cu01 DeepFoldRNA]$ echo $PATH /home/xxxxx/xxxx/conda_local/conda/envs/deepfoldrna/bin:.......... 6.2补充环境变量 /home/xxxxxxx/conda_local/conda/envs/xxxx/bin:/home/xxxx/xxxx/conda_local/conda/envs/xxxx/lib: 增加了gcc二进制文件的环境变量和lib文件的环境变量,但是还是报错,之后也没有删除,具体探索也不探索了,感觉问题不是关键,但加上也没有错误 7、如果还找不到链接库的版本只能是动态链接库链接存在问题:即gcc没有问题,但是不要让他去找原有的链接库
8 设置动态链接库的环境变量
###临时起作用,程序加载过程中首先进行查询,加载完毕就没有了,echo发现原来设置的不存在
export LD_LIBRARY_PATH=/home/xxxx/xxxxx/conda_local/conda/envs/xxxxxx/lib/:$LD_LIBRARY_PATH
为了解决这个问题
在.bashrc文件中,加入下面语句,并source .bashrc。
也可以临时export
为解决这个问题,参考了以下博客,表示感谢:
https://www.cnblogs.com/chenwenyan/p/13510173.html
==成功了=
1、虚拟环境就是类似一个桃花岛,与世无争,与外界互不干扰
2、虚拟环境下安装gcc后,需要进行环境变量的设置~/bin/:~/lib/(非关键)
3、环境变量的设置:
export PATH=/usr/local/nginx/sbin/:$PATH,将/usr/local/nginx/sbin/目录临时添加到环境变量中–添加在已有的环境变量的前面
export PATH=$PATH:/usr/local/nginx/sbin/,将/usr/local/nginx/sbin/目录临时添加到环境变量中–添加在已有的环境变量的后边
4、动态链接库的设置
5、hpc其实是多个计算节点的集群,可以ssh具体的节点进行运行程序,也可以利用pbs进行交互式运行(随机分配到具体的节点而已);利用pbs的时候可以先source激活虚拟环境,之后增加环境变量(顺序改变没试过)之后正常调用程序即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。