我最近从Kubuntu 12.04升级到13.04,完全重新安装。
使用gcc 4.7.3。我编译了一些程序以发现没有/usr/include/sys
目录。也就是说,types.h
,stat.h
,等,都是不存在的。它们存在于include/linux
目录中,但不存在include/sys
。
这是怎么回事?
我最近从Kubuntu 12.04升级到13.04,完全重新安装。
使用gcc 4.7.3。我编译了一些程序以发现没有/usr/include/sys
目录。也就是说,types.h
,stat.h
,等,都是不存在的。它们存在于include/linux
目录中,但不存在include/sys
。
这是怎么回事?
Answers:
如果您在64位上使用Ubuntu(我现在不能在32位系统上完全发短信),那么问题所在的目录是:
/usr/include/x86_64-linux-gnu/sys
现在,有了这些信息,如果您确实需要在该位置(/usr/include/sys
)上使用这些文件,可以在这些终端上创建符号链接:
sudo ln -s /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/sys/types.h
sudo ln -s /usr/include/x86_64-linux-gnu/sys/stat.h /usr/include/sys/stat.h
# ...etc
如果您使用的是64位linux,请安装libc6-dev-amd64。在ubuntu终端上键入以下命令:
sudo apt-get install libc6-dev-amd64
sys目录是带有许多系统命令的unix / linux系统标头目录。不同品牌/版本的linux可能会将其放在不同的位置。以下命令可以为您提供帮助:
find /usr/include -type d -name sys
On my ubuntu 16 got the two
/usr/include/bsd/sys
/usr/include/x86_64-linux-gnu/sys
第一个是BSD UNIX系统标头的所在地。
第二个目录是包含Linux 64位系统头的目录。
我遇到了cmake无法找到sys / stat.h文件的问题。我的临时解决方案是建立一个符号链接
/user/local/include/sys/stat.h from /usr/include/x86_64-linux-gnu/sys/stat.h
我不想污染/ usr / include目录,并且只链接到一个特定的头文件,而不链接整个sys目录。我认为这是cmake的缺陷,因此仅建立一个链接即可将影响降至最低。希望这可以帮助那些遭受同样问题困扰的人。
让我们检查一下gcc的默认包含搜索路径是什么。从这个答案中,我们得到以下命令:
gcc -xc -E -v -
在输出的结尾,我在计算机上看到了这一点:
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/4.8/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
注意倒数第二行。这意味着,当您使用编译C文件时#include <sys/stat.h>
,gcc会/usr/include/x86_64-linux-gnu/sys/stat.h
在尝试之前进行查找/usr/include/sys/stat.h
,而无需我们进行任何符号链接。
由于我的体系结构是amd64,所以没有libc6-dev-amd64
。要安装的软件包为libc6-dev-i386
。
这样就解决了CPAN包的依赖性。