LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 969|回复: 5

[总算明白了] 这些 -lm -ldes -lXXX 的来源。

[复制链接]
发表于 2006-2-25 07:31:32 | 显示全部楼层 |阅读模式
昨晚突然想到一个问题,就是如果我指定 -lm 的话,gcc / glibc / ldd 是怎么去找相应的库的?
刚想发帖子问,突然不知道怎么了,找到灵感了,就验证了一下。

-lm 是找 /lib/libm-2.3.6.so
-lkrb5  是找 /usr/lib/libkrb5.so.17

[html]
规律:
-l  c
libc.so.6
-l  krb5
libkrb5.so
-l  kafs
libkafs.so
[/html]

就是把lib去掉了。算是明白了。。。
发表于 2006-2-25 10:08:31 | 显示全部楼层
Post by 终极幻想
昨晚突然想到一个问题,就是如果我指定 -lm 的话,gcc / glibc / ldd 是怎么去找相应的库的?
刚想发帖子问,突然不知道怎么了,找到灵感了,就验证了一下。

-lm 是找 /lib/libm-2.3.6.so
-lkrb5  是找 /usr/lib/libkrb5.so.17

[html]
规律:
-l  c
libc.so.6
-l  krb5
libkrb5.so
-l  kafs
libkafs.so
[/html]

就是把lib去掉了。算是明白了。。。

应该是:
-l  c
libc.a
-l  krb5
libkrb5.a
-l  kafs
libkafs.a

    因为 -lxxx 选项是在编译时指定的,也就是说寻找静态库。 而动态库是通过文件 /etc/ld.so.conf 指定然后通过 ldconfig 命令写进 /etc/ld.so.cache 文件,运行时由加载器搜寻。
    不知这样理解是否正确。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-25 10:24:04 | 显示全部楼层
gcc -lkrb5 -static dummy.c
gcc -lkrb5 dummy.c
前者是找 .a 的,后者是找 .so 的。

两者都是通过ld找的。
回复 支持 反对

使用道具 举报

发表于 2006-2-25 10:44:50 | 显示全部楼层
又长知识了。
再一次印证一句话:实践是检查真理的唯一标准。
回复 支持 反对

使用道具 举报

发表于 2006-2-25 13:07:18 | 显示全部楼层
让我想起了我那会搞静态编译600k Apache的时候经常要捣鼓这玩意,缺少的东西就往上加.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-25 19:12:08 | 显示全部楼层
让我想起了你那会搞 BT的组合 的时候经常要捣鼓这玩意,缺少的东西就网上加:)。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表