linux - lib{library name}.a/.so 是 Linux 中静态库的命名约定吗?

标签 linux ubuntu linker makefile

我最近不得不在 Ubuntu 系统上做一些小的编程(我是一个非常低级的初学者),我真的只是熟悉 makefile。

我注意到告诉链接器要包含哪些库的参数总是 -l{library name},其中相应的库将是/usr/lib 文件夹中名为“lib{library name}.a”的东西。

我想知道:这是一个惯例吗?我原以为我需要键入 -llibNAME 才能找到名为 libNAME.a 的库,但它似乎假定有一个 lib 前缀。

总是这样吗?我可以在不使用 lib 前缀的情况下命名库吗?

最佳答案

您可以任意命名,但是 ld-l 假设一个 lib 前缀适用于静态库和共享库回到很远的地方;您需要明确命名它才能使用不带 lib 前缀的名称。

这甚至在现代系统上也很有用:名称 libfoo.so 可以被识别为链接时库,而 foo.so 表示共享对象实现一个运行时插件。或者用特定于子系统的前缀代替 lib 来识别特定子系统的插件;参见例如 pam_*.sonss_*.so

关于linux - lib{library name}.a/.so 是 Linux 中静态库的命名约定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6561273/

相关文章:

c++ - 我应该在 C++ 中分离 cpp 和 h 文件吗?

c - 如何获取指向 MSVC 中二进制部分的指针?

c++ - ocl::CRException 的类型信息

linux - 无法使用 windows 子系统将本地文件 wsl ubuntu 终端传输到远程服务器

linux - 在多个文件中查找并替换特定术语

postgresql - 如何从 PGAdmin4 连接到 docker Postgres 服务器

c++ - 在 C 中创建 DLL 并从 C++ 项目链接它

linux - 如何使用 sed 's/$var/$var2' 文件

linux - Debian 软件包分发和组件

python - 在Docker上安装detectron2软件包