加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

c – 为什么在文件夹“/ lib”和“/usr/lib”中链接库(如pthrea

发布时间:2020-12-13 19:00:28 所属栏目:Linux 来源:网络整理
导读:1.为什么我们需要链接非标准库/包含非标准头文件,当它们已存在于正确的文件夹中时 anirudh@anirudh-Aspire-5920:~/Documents/DUMP$locate libpthread/lib/libpthread-2.12.1.so/lib/libpthread.so.0/usr/lib/libpthread.a/usr/lib/libpthread.so/usr/lib/lib

1.为什么我们需要链接非标准库/包含非标准头文件,当它们已存在于正确的文件夹中时

anirudh@anirudh-Aspire-5920:~/Documents/DUMP$locate libpthread
/lib/libpthread-2.12.1.so
/lib/libpthread.so.0
/usr/lib/libpthread.a
/usr/lib/libpthread.so
/usr/lib/libpthread_nonshared.a
/usr/lib/xen/libpthread.a
/usr/lib/xen/libpthread_nonshared.a
anirudh@anirudh-Aspire-5920:

ld.so/ld-linux.so的手册页 – 动态链接器/加载器表示在默认路径/ lib和/usr/lib中搜索程序所需的必需库.
当我的库的.so文件已经在/ lib文件夹中时,为什么我需要专门链接它.
此外,-l选项用于链接静态库.但是当我对进程进行pmap时,我发现正在使用带扩展名为.so的pthread的动态库,而不是扩展名为.a的动态库.
同样

anirudh@anirudh-Aspire-5920:~/Documents/DUMP$locate mysql.h
/usr/include/mysql/mysql.h
anirudh@anirudh-Aspire-5920:~/Documents/DUMP$

当它已存在于/usr/include文件夹中时,它是所有头文件的标准文件夹,那么为什么我需要使用-I选项专门包含它.

最佳答案
>虽然链接器在/ lib和/usr/lib中搜索所请求的库,但这并不意味着它会自动加载所有这些库.加载库是一项相当昂贵的操作,因此链接器只加载它知道需要的库. -l是告诉它需要库的东西.有一些操作系统和工具链会根据标题中的指令自动尝试找出需要哪些库(Visual C在Windows上执行此操作),但这种技术并未在Linux上使用.
> -l用于静态库和共享库.如果两者都存在,则将使用共享版本,除非为链接器指定了-static.
>如果#include< mysql / mysql.h>,预处理器将在/usr/include/mysql/mysql.h中查找.也就是说,搜索不是递归的 – 如果你指定< mysql.h>预处理器将查看/usr/include/mysql.h,但不查看/usr/include/mysql/mysql.h.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读