标签 ubuntu 下的文章

解决ubuntu 16.04 64bit上fatal error: sys/cdefs.h: No such file or directory

错误信息:

make
Skip building js due to lack of nodejs
Skip building el due to lack of emacs
Skip building cl due to lack of sbcl
Skip building cpp due to lack of g++-6
Skip building i due to lack of ick
cp test/24_cmp2.c out/24_cmp2.c.tmp && mv out/24_cmp2.c.tmp out/24_cmp2.c
git submodule update --init
Submodule '8cc' (https://github.com/shinh/8cc) registered for path '8cc'
Submodule 'Whitespace' (https://github.com/koturn/Whitespace) registered for path 'Whitespace'
Submodule 'tinycc' (http://repo.or.cz/tinycc.git) registered for path 'tinycc'
Cloning into '8cc'...
remote: Counting objects: 4541, done.
remote: Compressing objects: 100% (187/187), done.
remote: Total 4541 (delta 112), reused 0 (delta 0), pack-reused 4354
Receiving objects: 100% (4541/4541), 1.42 MiB | 1.19 MiB/s, done.
Resolving deltas: 100% (3026/3026), done.
Checking connectivity... done.
Submodule path '8cc': checked out '842752b089019bf883e21604a98e712b55fd7727'
Cloning into 'Whitespace'...
remote: Counting objects: 54, done.
remote: Total 54 (delta 0), reused 0 (delta 0), pack-reused 54
Unpacking objects: 100% (54/54), done.
Checking connectivity... done.
Submodule path 'Whitespace': checked out '16be2c0617a6f7846c53802e1a4cb382ccf7dc8a'
Cloning into 'tinycc'...
remote: Counting objects: 8915, done.
remote: Compressing objects: 100% (2610/2610), done.
remote: Total 8915 (delta 6260), reused 8864 (delta 6217)
Receiving objects: 100% (8915/8915), 2.89 MiB | 531.00 KiB/s, done.
Resolving deltas: 100% (6260/6260), done.
Checking connectivity... done.
Submodule path 'tinycc': checked out 'c948732efaf823f36d05608fe716bfcc4a98b70c'
touch out/git_submodule.stamp
make -C 8cc && cp 8cc/8cc out/8cc
make[1]: Entering directory '/home/ondrej/repos/elvm/8cc'
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o main.o main.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o cpp.o cpp.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o debug.o debug.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o dict.o dict.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o gen.o gen.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o lex.o lex.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o vector.o vector.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o parse.o parse.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o buffer.o buffer.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o map.o map.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o error.o error.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o path.o path.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o file.o file.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o set.o set.c
cc -Wall -Wno-strict-aliasing -std=gnu11 -g -I. -O0 -DBUILD_DIR='"/home/ondrej/repos/elvm/8cc"'   -c -o encoding.o encoding.c
cc -o 8cc main.o cpp.o debug.o dict.o gen.o lex.o vector.o parse.o buffer.o map.o error.o path.o file.o set.o encoding.o 
make[1]: Leaving directory '/home/ondrej/repos/elvm/8cc'
cc -c -I. -std=gnu99 -m32 -W -Wall -W -Werror -MMD -MP -O -g -Wno-missing-field-initializers -Wno-missing-field-initializers ir/ir.c -o out/ir.o
In file included from /usr/include/stdio.h:27:0,
                 from ./ir/ir.h:4,
                 from ir/ir.c:1:
/usr/include/features.h:367:25: fatal error: sys/cdefs.h: No such file or directory
compilation terminated.
Makefile:62: recipe for target 'out/ir.o' failed
make: *** [out/ir.o] Error 1

解决方案:

sudo apt install libc6-dev-i386

64位ubuntu缺少32位库的解决办法

貌似在12.04以前,都是直接安装ia32-lib包解决问题,之后官方不晓得因为什么原因取消了该软件包。在14.04上,直接使用以下命令安装即可:

sudo aptitude install lib32z1 lib32z1-dev

等待安装完成,就可以愉快的开启steam了

ubuntu下挂载exfat格式分区

本来是一个比较蛋疼的原因,我希望有一个移动的Linux可以使用,于是买了一个1T的移动硬盘,在里面安装了一个Ubuntu 14.04,分区大致为:750G Linux,250G临时文件共享使用

由于被Mac整成惯性思维了,于是那250G就没用NTFS格式,采用了exfat格式。
谁知道他喵的,居然不能直接挂载,说是不认识exfat,我去。。。。。。。(悲催的是,我发现ubuntu 14.04居然打包了NTFS-3G,装上就支持NTFS了)

无奈之下,系统都差不多配好了,就这么着吧,安装exfat的支持:

sudo apt-add-repository ppa:relan/exfat
sudo apt-get update
sudo apt-get install exfat-fuse exfat-utils

如果不能挂载,则重启一次就好啦

Ubuntu 安装后无法重启/关机的解决办法

现象:无论是GUI关机/重启,还是命令行reboot/shutdown,均在关机时保持黑屏状态,有风扇在狂转
1.备份/etc/default/grub

    $sudo cp /etc/default/grub /etc/default/grub.bak

2.打开/etc/default/grub文件,找到

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

这行。修改为:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=off"

保存后,在终端内执行命令:

    $sudo update-grub

重启后(还是得手动关机一次,因为这会还没有生效),再次执行重启/关机命令就可以恢复正常了

Debian/Ubuntu修改ulimit

使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。
新装的linux默认只有1024,当作负载较大的服务器时,很容易遇到error: too many open files。因此,需要将其改大。
使用 ulimit -n 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit -n 65535,-S指soft,-H指hard)
有如下三种修改方式:
1.在/etc/rc.local 中增加一行 ulimit -SHn 65535
2.在/etc/profile 中增加一行 ulimit -SHn 65535
3.在/etc/security/limits.conf最后增加如下两行记录

* soft nofile 65535
* hard nofile 65535

RedHat系的使用第一种和第三种,修改完成后reboot,就会发现已经是65535了,至于Debian/Ubuntu,总是出问题,以下是针对deb系的Linux发行版修改方法:
第一步:配置/etc/security/limits.conf

sudo vim /etc/security/limits.conf
在文件尾部追加 
* hard nofile 40960
* soft nofile 40960

4096可以自己设置,四列参数的设置见英文,简单讲一下:
第一列,可以是用户,也可以是组,要用@group这样的语法,也可以是通配符如*%
第二列,两个值:hard,硬限制,soft,软件限制,一般来说soft要比hard小,hard是底线,决对不能超过,超过soft报警,直到hard数
第三列,打开文件数是nofile
第四列,数量,这个也不能设置太大

第二步:/etc/pam.d/su(官方)或/etc/pam.d/common-session(网络)

sudo vim /etc/pam.d/su
将session    required   pam_limits.so这一行注释去掉 

重启系统

sudo vim /etc/pam.d/common-session
加上以下一行
session required pam_limits.so

打开/etc/pam.d/su,发现是包含/etc/pam.d/common-session这个文件的,所以修改哪个文件都应该是可以的
这个觉得修改su这个文件比较好,取消注释就OK了,不容易出错,vim打开,定位,x一下即可
官方只到第二步,就重启系统了,没有第三步,好象不行,感觉是不是全是第三步的作用?!

2015年03月01日更新:
_
在这个网址里描述了同样的问题和解决办法:http://askubuntu.com/questions/162229/how-do-i-increase-the-open-files-limit-for-a-non-root-user

At first I missed the wildcard on the end of /etc/pam.d/common-session* and just edited common-session, and even after a reboot it didn't work. But after adding the same line (for pam_limits.so) to common-session-noninteractive, ulimit -n displayed the new value after a fresh login (no reboot required). FWIW I was trying to change the limit for root (only).
_

第三步:配置/etc/profile
最后一行加上

ulimit -SHn 40960

重启,ulimit -n 验证,显示40960就没问题了