user-0 提问: linux下的c程序，链接库在什么地方

回复:
user: user-1
content: linux fork系统调用，被libc封装了 为什么linux不需要lib只是和所使用的库文件格式相关的，linux使用的是elf格式，和windows下的不同

user: user-2
content: 引用 16 楼 u013666035 的回复:[quote=引用 13 楼 zhao4zhong1 的回复:] [quote=引用 8 楼 zmlovelx 的回复:] echo $LD_LIBRARY_PATH 其实这位仁兄的回复才是正解。[/quote]  明显不对，显示是空的[/quote]  前提是楼主定义过这个环境变量....没有当然是空的.

user: user-3
content: 引用 21 楼 u013666035 的回复:[quote=引用 20 楼 u014162349 的回复:] 引用GLIBC_2.0是什么意思啊，对应哪个文件 glibc是C语言的实现库名称，貌似这个名称解决不了你的问题哦。  引用还有你是怎么链接到/lib/libc.so.6啊，这里用的是/lib/tls/libc.so.6 libc是C语言库文件名以及路径 为什么你的路径和我的不一样呢，这要看下你编译的文件makefile是怎么写的？ 比如你用一个库，并且指定查询路径 -L /lib/tls/ ，那边就会出现上面的路径 makefile中会有上面一些人说的 -L 后面带库路径  -l后面带库名称   其他都清楚了，现在就一个问题，为什么linux的动态链接不需要对应的lib[/quote] fork，系统调用之一。“系统调用”这个词暗示着它是和操作的实现紧密相关的，不具备移值性，不同于用户级层面的pthread 库。“系统调用”也意味着它是关联到操作系统的一部分。使用动态链接库，仅仅提供入口，用代码共享的方式，不仅节省程 序代码空间，而且在操作系统升级了.so的时候（通常伴随着内核的升级），只要保持接口不变，程序在新的环境下仍然能正 常运行。对比静态库，一旦代码绑定，在新的环境下不重新编译，未必还能正常运行。  个人见解，仅供参考。

user: user-0
content: 引用 20 楼 u014162349 的回复:引用GLIBC_2.0是什么意思啊，对应哪个文件 glibc是C语言的实现库名称，貌似这个名称解决不了你的问题哦。  引用还有你是怎么链接到/lib/libc.so.6啊，这里用的是/lib/tls/libc.so.6 libc是C语言库文件名以及路径 为什么你的路径和我的不一样呢，这要看下你编译的文件makefile是怎么写的？ 比如你用一个库，并且指定查询路径 -L /lib/tls/ ，那边就会出现上面的路径 makefile中会有上面一些人说的 -L 后面带库路径  -l后面带库名称  其他都清楚了，现在就一个问题，为什么linux的动态链接不需要对应的lib

user: user-4
content: 引用GLIBC_2.0是什么意思啊，对应哪个文件 glibc是C语言的实现库名称，貌似这个名称解决不了你的问题哦。  引用还有你是怎么链接到/lib/libc.so.6啊，这里用的是/lib/tls/libc.so.6 libc是C语言库文件名以及路径 为什么你的路径和我的不一样呢，这要看下你编译的文件makefile是怎么写的？ 比如你用一个库，并且指定查询路径 -L /lib/tls/ ，那边就会出现上面的路径 makefile中会有上面一些人说的 -L 后面带库路径  -l后面带库名称

user: user-5
content: 引用 16 楼 u013666035 的回复:[quote=引用 13 楼 zhao4zhong1 的回复:] [quote=引用 8 楼 zmlovelx 的回复:] echo $LD_LIBRARY_PATH 其实这位仁兄的回复才是正解。[/quote]  明显不对，显示是空的[/quote] 命令行参数 -L（.a库文件所在目录）

user: user-6
content: 引用 楼主 u013666035 的回复:就是kernel32.lib这种，linux下应该是一样的  gcc默认是到什么地方去找，还有就是怎么知道fork对应的lib和dll是什么  ldd 还有种笨方法 就是 直接vim打开可执行程序，看看里面有哪些lib的符号

user: user-5
content: 使用ldd命令查看可执行程序依赖的.so

user: user-7
content: 动态库 Linux .so   Windows .dll 静态库 Linux .a      Windows .lib  注意引导路径，

user: user-8
content: 引用 4 楼 u013666035 的回复:[quote=引用 2 楼 buyong 的回复:] glibc  linux下，lib和dll对应的是什么文件[/quote] .lib 对应.a 文件。 .dll对应.so文件。

user: user-0
content: 引用 14 楼 u014162349 的回复:第一个问题：可以用ldd命令来观察进程  [root@TM4 fork_test]# ldd test  	linux-gate.so.1 =>  (0xb7746000) 	libc.so.6 => /lib/libc.so.6 (0x4d1db000) 	/lib/ld-linux.so.2 (0x4d1b4000)   还有你是怎么链接到/lib/libc.so.6啊，这里用的是/lib/tls/libc.so.6

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:[quote=引用 8 楼 zmlovelx 的回复:] echo $LD_LIBRARY_PATH 其实这位仁兄的回复才是正解。[/quote]  明显不对，显示是空的

user: user-0
content: 引用 14 楼 u014162349 的回复:第一个问题：可以用ldd命令来观察进程  [root@TM4 fork_test]# ldd test  	linux-gate.so.1 =>  (0xb7746000) 	libc.so.6 => /lib/libc.so.6 (0x4d1db000) 	/lib/ld-linux.so.2 (0x4d1b4000)   第二个问题：可以用nm查询进程中的函数属于哪个库  [root@TM4 fork_test]# nm test |grep fork          U fork@@GLIBC_2.0 [root@TM4 fork_test]#   GLIBC_2.0是什么意思啊，对应哪个文件

user: user-4
content: 第一个问题：可以用ldd命令来观察进程  [root@TM4 fork_test]# ldd test  	linux-gate.so.1 =>  (0xb7746000) 	libc.so.6 => /lib/libc.so.6 (0x4d1db000) 	/lib/ld-linux.so.2 (0x4d1b4000)   第二个问题：可以用nm查询进程中的函数属于哪个库  [root@TM4 fork_test]# nm test |grep fork          U fork@@GLIBC_2.0 [root@TM4 fork_test]#

user: user-5
content: 引用 8 楼 zmlovelx 的回复:echo $LD_LIBRARY_PATH 其实这位仁兄的回复才是正解。

user: user-5
content: 使用objdump可以查看.so中都导出了哪些函数。

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:使用ldd命令查看可执行程序依赖的.so  是不是linux下的系统调用函数全在libc.so.6啊

user: user-0
content: 引用 6 楼 max_min_ 的回复:动态库 Linux .so   Windows .dll 静态库 Linux .a      Windows .lib  注意引导路径，  不是静态库，是动态库的隐式链接lib，好像linux不需要这个，不知道为什么

user: user-0
content: 引用 5 楼 luotuo44 的回复:[quote=引用 4 楼 u013666035 的回复:] [quote=引用 2 楼 buyong 的回复:] glibc  linux下，lib和dll对应的是什么文件[/quote] .lib 对应.a 文件。 .dll对应.so文件。[/quote]  不是静态库，是动态库的隐式链接lib，好像linux不需要这个，不知道为什么

user: user-9
content: echo $LD_LIBRARY_PATH