我有自己的头文件和库,我不想为每个新项目复制它们,因为这样会使修复错误或向库添加新功能变得困难。所以我想把它们放在一个“公共”目录中,就像/usr/include
或/usr/local/include
和它们的库对应目录一样,但我不知道我在哪里弄乱了系统!我可以创建自己的目录并在每次编译时指定它,但这很麻烦。我可以把这些文件放在哪里?我找到了一个问题关于这一点,答案是/usr/local/include
,但我在某处读到它用于包管理器,这是真的吗?
答案1
如果应用程序要由系统中的所有用户使用,则树/usr/local
是理想的地方;没有包应该将文件放在那里(它是用于您自己编译的软件),但该目录/usr/local/lib
位于 dinamyc 加载器的默认路径中。(参见/etc/ld.so.conf.d/libc.conf
)。
我通常甚至会将/usr/local
树移动到下方/home
(只需将目录移动/usr/local
到/home/local
,然后符号链接/usr/local -> /home/local
),以便它在完全重新安装后仍然存在(1)。
如果应用程序仅供您的用户使用,我通常会创建$HOME/lib
,$HOME/include
然后使用环境变量或编译器标志来指向它们。
脚注
(1)我通常将/
和安装/home
在单独的分区上,但这是非常个人的选择。
答案2
我创建了在 /usr/local 中创建新本地目录的惯例。所以对我来说它是 /usr/local/local/lib。这允许其他开发人员将他们的资料发布到 /usr/local,然后您就不会遇到任何文件名冲突。如果您随后想要发布并将您的资料移动到 /usr/local/lib 和 /usr/local/include,您可能需要在所有源和 make 文件中进行名称更改,这将很麻烦,但如果您小心谨慎地进行操作,sed 会有所帮助。当您在 /usr/local/lib 或任何非标准位置有库时,您必须设置环境变量 LD_LIBRARY_PATH,以便执行程序知道在哪里查找以链接自身。