Tag Archives: Linux

Mac OS X 10.11源码安装GCC 5.1.0

1、环境

宿主:Mac OS X 10.11

安装目标:GCC 5.1.0,手册下载

第三方依赖库: gmp 6.1.0mpfr 3.1.4mpc 1.0.3

2、前提

执行

下载Mac OS X Command Line Tools,安装完毕后/usr/include会有下载好的头文件,不执行此步骤会在后续的gcc编译过程中找不到在/usr/include下的系统头文件。

3、第三方依赖库安装

顺序:gmp->mpfr->mpc

过程:./configure->make->make check->sudo make install

编译安装完后,库文件放置在/usr/local/lib,头文件放置在/usr/local/include

4、编译安装GCC

./configure 确保上述步骤执行没用问题

make 这个过程耗时一个小时,结果最后还是出错了,错误如下

搜索发现这是一个bug,新版本的苦又来了,幸好官方已经给了解决方案。

bug list

patch

修改gcc-5.1.0/gcc/config/darwin.c文件中的darwin_mark_decl_preserved方法。

make clean 重新编译。

结果又踩雷一次,编译到与Java运行时库链编时报错

还是一个bug,按照bug patch修复configure文件还是不能编译通过,最后无奈添加忽略Java语言,

运行./configure  –enabled-languages=ada, c, c++, fortran, go, jit, lto, objc, obj-c++

重新运行 make dist-clean&make继续。

经过一个多小时后编译完成,sudo make install 大功告成。

后期测试发现gcc 5.3.0没有上述问题,可以考虑安装。

Linux Shell (8)-中断信号、脚本启动

1)  signal

Ctrl+C=SIGINT=kill  -9

Ctrl+Z=SIGTSTP=kill -18

2) trap 捕获信号

trap commands signals 捕获signals信号,执行commands

trap commands EXIT 捕获正常退出,执行commands

trap signals 移除捕获signals

3) nohup

nohup commands & 后台运行commands,输出到nohup.out

4) jobs 列出相关的作业列表

-l     列出进程PID和job编号

-p    列出作业PID

-r     列出运行的作业

-s     列出停止的作业

列表中显示”+”的作业为默认作业,显示”-“的作业为默认作业完成后将成为默认作业,在某一个时间点,只能有一个默认作业(“+”)和待将成为的默认作业(“-“)

5) bg\fg 后台\前台 重启停止的作业

bg\fg number 将作业号为number的作业启动

6) nice\renice 调整执行脚本的优先级(20~-20),默认为0

nice -n commands        指定优先级执行commands,如果为非系统用户只能降低优先级

renice number -p PID   调整运行中的进程PID优先级为number,非系统用户只能调整自己拥有的进程且只能调降

7) at\atq\atrm  定时执行作业\查询队列作业\删除队列作业

at -f shellfile time

time格式:10:08\10:08PM\now、noon、midnight\MMDDYY\Juln 4\Now + 30minutes

-q 执行优先级,默认为a最高优先级,a-z任一字母

-m 作业没有输出也发送消息(在/var/spool/at/下)

atq       列出系统中排队的作业

atrm    移除作业

 

8) crontab

cron文件格式:min hour dayofmonth month dayofweek command

-u   指定以哪个用户执行

-e   编辑cron

-l   列出当前的cron

 

Linux Shell (7)-输入输出-read、exec、lsof、mktemp、tee

1) read 读取用户输入

-n1 限定输入长度为1

-p 提示语

-t  等待输入的秒数

-s  将输入隐藏(密码输入等需求,这是个黑科技!!!)

若后面不加变量var的话,默认将输入存储在REPLY

2) 标准文件描述符,一个shell最多可以打开9个文件描述符

0  STDIN        标准输入(默认键盘)

1  STDOUT    标准输出(默认终端显示器)

2  STDERR     标准错误

3)

错误输出到文件:ls -al aaa 2>error.txt

正常输出到文件:ls -al aaa 1>out.txt

所有输出到文件:ls -al aaa &>all.txt

4)重定向输出

临时重定向:>&2或者 >&1

永久重定向:exec 1>out.txt

5) 重定向输入

exec 3<&0

exec 0< file

………

exec 0<&3

6)

exec 3<> file    创建读取写入文件描述符。注:读取、写入时的指针在同一位置

exec 3>&-    关闭文件描述符

7) lsof

-a 连接两个选项的输出结果

-p 进程ID,当前进程用$$表示

-d 指定要显示的文件描述符编号

输出属性

COMMAND     进程命令行名称前9个字符

PID                    进程ID

USER                 进程所属用户名

FD                      文件描述符编号、类型(r读、w写、u读写)

TYPE                  文件类型(CHR字符、BLK块、DIR目录、REG常规)

DEVICE              设备编号

SIZE                   可用情况下的大小

NODE                本地文件的节点编号

NAME                 文件名称

8) 禁止shell输出

1>/dev/null或者2>/dev/null

9) mktemp 创建临时文件

mktemp file.XXX

XXX为3个随机字符,长度按需指定,创建成功返回文件名

-t 强制在系统临时目录中创建临时文件并返回文件全路径,默认在当前目录

-d 创建临时目录

10) tee T型管道输出,不仅将管道输出到STDOUT还可以输出到另外的地方

-a 输出时追加