2013-06-24 23 views
0

这是一个让我困惑不已的问题一年多,但我从来没有打扰过尝试并回答它......直到今天...什么是C++程序员应该在linux文件系统上知道的重要目录?

我注意到我安装了SFML“库” '在/ usr /本地/包括/ SFML /'。

如果我看看那个目录,我发现它主要包含头文件。所以我猜测'include'目录应该包含头文件而不是目标文件。

这提出了问题。 'cmath'或'vector'在哪里?

事实证明,使用find,它们被放置在 '/usr/include/c++/4.7/cmath' - 基本上是 '/ usr/include目录/'

那么究竟是什么(之间的局部有区别”/usr/local/include')和包含目录('/ usr/include')?

此外,在文件系统中,我看到很多'lib','lib32'和'lib64'导演。我的猜测是编译后的.cpp文件或目标文件位于这些目录中。我猜测lib是64位体系结构进入游戏之前使用的旧目录。我猜测现代公认的做法是将32位目标文件放在lib32中,将64位版本放在lib64中。那是对的吗?

有一个'/ usr/local/lib'目录。

但是还有一个'/ usr/lib'目录。同样,为什么要增加一个“本地”的?另外,'/ usr /'里面有'lib','lib32'和'lib64'。但是,在'/ usr /'里面只有一个'lib'目录。为什么是这样?

+0

这不是'Linux',这是' GNU Linux' - 现在开始了,从此不再犯罪了。 –

+0

这真的很关键吗? – user3728501

回答

6

我不确定这个问题有具体的答案,但我会尽量给出一些指导。

通常/usr/local用于“自定义安装”。也就是说,它不是基本安装的一部分。当然,这是一个指导原则,因此您仍然可以在/usr/lib中找到安装在/usr/local/lib(或适当的/usr/local/lib{32,64})中的东西。

是的,lib32lib64适用于大小依赖的库(尽管如果你在lib64和lib32中安装32位库,你的程序将工作得很好 - 它只是更难遵循什么是继续如果你这样做!)。

有时它是liblib64liblib32。这取决于分布而变化。如果有lib32lib64,那么lib通常用于保存“大小无关”的内容,例如存储在/usr/lib中的配置文件。

当然还有其它的目录,是了解有用的 - 你的主目录,/var/log/日志文件,/var/run用于锁定文件和.pid档案等“身份”文件为特定应用程序,有一个/var/lib目录太 - 这似乎包含一些随机选择的特定于组件的库。(这是/usr/local/的另一种变体)有时用于存储二进制文件等。

编辑:

directorys可能了解有用的另一类是/proc/sys/dev目录。

/proc在内核中由procfs支持的文件系统驱动程序提供了有关系统正在执行的操作的信息,例如, cat /proc/meminfo将显示内存的统计信息(以及它的使用情况),cat /proc/cpuinfo将显示机器具有的CPU。 cat /proc/self/status将显示当前进程的状态。如果你想看看其他进程在做什么,cat /proc/xx/status,其中xx是进程ID(一个数字)将显示其他进程在做什么。如果你在里面寻找更多的可用物品 - 其中一些比其他物品更有用。

/sys/proc有类似的结构,但有更多的“系统”导向,其中/proc更多地是关于进程,但是有一些重叠。

/dev/是设备的“根”。 /dev/sda将会是您的其中一个硬盘(但可能有其他名称,具体取决于您拥有的硬盘)。

+0

嗯,好的谢谢,所以gcc库进入/ usr/include,因为它们是标准的东西,但是sfml进入本地包含目录,因为sfml是有点专家或非标准的,或者通常被认为是不可用的标准安装?我遵循了正确吗? – user3728501

+0

是的,类似的东西。 –

+0

@MatsPetersson在SysV(和大多数商业版本)下,不会有'/ usr/local /'。每个“包”在'/ opt'下有自己的目录(可选),_should_完全包含在那里。这具有很大的优势,您可以使用'rm -fr/opt/package_name'完全删除软件包(假设有足够的权限)。这也意味着编译器只会查找包含文件并链接到您指定的包('-I/opt/package_name/include'和'-L/opt/package_name/lib')的库。 –

相关问题