LinuxSir.cn,穿越时空的Linuxsir!

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

我想问一下关于库的问题。

[复制链接]
发表于 2004-6-23 22:18:35 | 显示全部楼层 |阅读模式
我想请教一下,在linux下学程序时
比如用到了数学库math,在gcc的参数里要加了  -lm
这些库放在了什么地方啊?  /lib?  /usr/lib?
还有在window下好像不用这么麻烦。
如如果用到了mollac中的  哪  -l 参数后面跟什么啊?  不会还是  -lm 吧
怎么能知道  -l后面跟什么呢?
发表于 2004-6-24 02:19:41 | 显示全部楼层
mollac是什么?malloc?这个不用指定。
windows下编程也一样,用VC建个工程,看看工程选项,默认的连接库有一大堆,而且你要是用了一些特殊的东西,也要自己指定库,比如PlaySound就需要winmm.lib
发表于 2004-6-24 09:15:02 | 显示全部楼层
在运行c程序时。
linux提供了一个libc的共享库,gcc编译如果没有加-nostdlib选项默认会连接这个库,这个库有1.2MB大!!!
不用加-lm的,因为math的算法也放到这个libc的库里的,除非你没有libc.so.6这个文件。
发表于 2004-6-24 09:39:05 | 显示全部楼层
使用ldd命令可以看到你运行的文件所依赖的共享库。
所有c++的程序均依赖libstdc++。
发表于 2004-6-24 09:54:04 | 显示全部楼层
不好意思,我试了一下是要加-lm的。
ldd的输出:
                libm.so.6 => /lib/tls/libm.so.6 (0x4001f000)
        libc.so.6 => /lib/tls/libc.so.6 (0x40042000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
发表于 2004-6-24 11:41:30 | 显示全部楼层
我发现了很奇怪的问题,我把程序改为C++的形式,编译不用加-lm了,运行正常。ldd有以下输出:
                libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x4001f000)
        libm.so.6 => /lib/tls/libm.so.6 (0x400d8000)
        libc.so.6 => /lib/tls/libc.so.6 (0x400fc000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40237000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
发表于 2004-6-25 08:49:04 | 显示全部楼层
最初由 realtang 发表
不好意思,我试了一下是要加-lm的。
ldd的输出:
                libm.so.6 => /lib/tls/libm.so.6 (0x4001f000)
        libc.so.6 => /lib/tls/libc.so.6 (0x40042000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)


错!
不是malloc需要libm,是数学库函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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