分类 Linux 下的文章

在centos7上安装了8+版本的gcc,环境变量配了,- v查看没问题,cmake安装llvm,报错,一看还是调用了旧版本的gcc

cmake -G 'Unix Makefiles' -DCMAKE_INSTALL_PREFIX=INSTALL_DIR -DCMAKE_BUILD_TYPE=Debug -DLLVM_ENABLE_ASSERTIONS=On ../llvm-14.0.3.src
CMake Error at cmake/modules/CheckCompilerVersion.cmake:39 (message):
Host GCC version must be at least 5.1, your version is 4.8.5.
Call Stack (most recent call first):
cmake/modules/CheckCompilerVersion.cmake:49 (check_compiler_version)
cmake/config-ix.cmake:14 (include)
CMakeLists.txt:732 (include)


-- Configuring incomplete, errors occurred!
See also "/opt/llvmbuild/CMakeFiles/CMakeOutput.log".

查了下,貌似cmake默认会去调用/usr/bin和/usr/local/bin,因为我是手动编译安装所以残留有原来的旧版本的gcc,但是我修改了这两个目录下gcc的ln指向,依旧还是报同样的错误,去修改了ld.so.conf手动添加了新版本gcc的链接库,ldconfig了,ldconig -v / -p都能查到,但是运行后依旧报同样错误

解决方法:

cmake的时候手动指定编译要用的gcc和g++的路径

cmake -G 'Unix Makefiles' -DCMAKE_INSTALL_PREFIX=/usr/local -DLLVM_INCLUDE_DIRS=/usr/local/gcc-9.4/lib64 -DCMAKE_BUILD_TYPE=Debug -DLLVM_ENABLE_ASSERTIONS=On ../llvm-14.0.3.src -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=$(which g++) -DCMAKE_C_COMPILER=$(which gcc)
运行了两次这个命令,能跑下去了

解决gcc的问题后,cmake又报了个错

CMake Error at CMakeLists.txt:1256 (add_subdirectory):
add_subdirectory given source
"/opt/llvm-14.0.3.src/../third-party/benchmark" which is not an existing
  directory.

https://github.com/llvm/llvm-project/issues/54941

从github上面看到,貌似是cmake的bug(也可能是feature hhhh)

解决方案:

vi CMakeCache.txt
LLVM_INCLUDE_BENCHMARKS:BOOL=OFF

终于跑通了,make中,希望下班前能装上bcc,折腾好几天了。。。

编译gcc,install完了按照博客改了个文件source,-v查看发现还是旧版本

补正方式

vi /etc/bashrc
#gcc
LD_LIBRARY_PATH=:/usr/local/mpc/lib:/usr/local/gmp/lib:/usr/local/mpfr/lib:/usr/local/gcc-9.4/lib:/usr/local/gcc-9.4/lib64


vi /etc/profile
export PATH=/usr/local/gcc-9.4/bin:$PATH

最后退出重登了一下就行

貌似一开始就改了第一个,没成功

bashrc和profile都是系统环境变量配置文件

个人配置文件:~/.bash_profile 、~/.bashrc。

全局配置文件:/etc/profile、/etc/profile.d/*.sh、/etc/bashrc

profile类文件主要用来设定环境变量、登陆前运行的脚本和命令。

bashrc类文件,则是设定本地变量,定义命令别名。如果全局配置文件和个人配置文件产生冲突,以个人配置文件为主。

bashrc是为每一个运行bash shell用户执行的文件,每当shell被打开就会被甲在,profile会在用户第一次登录的时候被执行

LD_LIBRARY_PATH是一个环境变量名,用于指定查找动态链接库的路径

export PATH也是个环境变量,作用类似于windows上的path

安装参考的博客之一,看了几篇博客,每一篇改的配置文件都不一样....

https://www.cnblogs.com/damonxu/p/6434265.html

解压

tar后面跟一个主要参数和多个可选参数,主要参数必须选一

主要参数

-c: 压缩
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件

常用可选参数

-z:gzip
-j:bz2
-Z:compress
-v:显示所有过程
-f:指定文件名,必须出现在最后,后面接文件名

例:

tar xvf gcc.tar

压缩

tar + c

tar -cvf [文件名].tar [文件目录] //打包成.tar文件

编译gcc,连着服务器放那跑,过几个小时看见编译停了,再一看有个报错

client_loop: send disconnect: Broken pipe

一查是因为长时间无操作ssh连接自动关闭,于是乎make进程跟着这个被关掉的shell一块寄了

解决方案:

vi  ~/.ssh/config
TCPKeepAlive yes
ServerAliveInterval 10
ServerAliveCountMax 10
重启服务
如果把电脑合上也会导致掉线.....

或把进程丢在后台跑

nohup command &

或只保持当前ssh不关闭(一次性)

ssh -o ServerAliveInterval=60 user@sshserver

文件属性日寄

跟着老司机上路第一天,整了个配测试环境的活,本以为装个虚拟机啥的轻轻松松,没想到全程翻车连连,唉,生产环境就是不一样,怀念在自己电脑上瞎折腾的日子

升级个内核,用的是老司机给的rpm包,安装方法参考以下两篇

https://blog.csdn.net/weixin_42606075/article/details/121583730

http://www.manongjc.com/detail/24-hnvnxalxsrkoppk.html.

yum一键安装,装完awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg 查看内核列表,寄了,怎么没有新装上去的内核,往上一翻记录,看到显示这么一行报错

grubby: error moving /boot/grub2/grub.cfg- to /boot/grub2/grub.cfg: Operation not permitted

惊了,我堂堂root用户,居然动个文件还会被Operation not permitted

百度了一番全是不知所云,求助老司机,排查一通,lsattr /boot/grub2/grub.cfg显示文件有个i权限,chattr -i /boot/grub2/grub.cfg去掉权限,后成功移动文件,再看列表就能看到新装的内核了,经老司机分析大概是前面某个跑的安全脚本干的好事

chattr\lsattr

chattr指令可改变linux文件系统的文件属性,这个属性得用lsattr才能看到,上面造成root都不能移动文件就是因为grub.cfg被人加上了i属性

语法:

chattr [option] +-=属性 obj

参数

-R    递归处理目录下的所有文件
-v    设置文件或目录版本
-V    显示指令执行过程
+    开启文件或目录的该项属性
--    关闭文件或目录的该项属性
=    指定文件或目录的该项属性

属性

a:让文件或目录仅供附加用途;***
i:不得任意更动文件或目录;  ***
A:当一个具有“A”属性的文件被访问时,它的atime记录不会被修改;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
j:如果文件系统安装有“data=order”或“data=writeback”选项,则具有“j”属性的文件在写入文件本身之前将其所有数据写入ext 3日志;
s:当删除具有“s”属性集的文件时,其块将被归零并写回磁盘;
S:当修改具有“S”属性集的文件时,更改将同步写入磁盘;这相当于应用于文件子集的“同步”挂载选项;
u:当删除具有‘u’属性集的文件时,它的内容将被保存

示例:使得日志文件只能追加数据,不能删除或者修改

chattr +a /var/log/messages

补充:如果vi/vim修改发现无法保存文件,还有可能是文件目录不存在,得先去创建目录