LinuxSir.cn,穿越时空的Linuxsir!

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

共享库的问题

[复制链接]
发表于 2006-2-24 17:33:52 | 显示全部楼层 |阅读模式
问一个简单的共享库的问题

  1. # Create shared library.
  2. # Use -lc to link it against C library, since libhello
  3. # depends on the C library.

  4. gcc -g -shared -Wl,-soname,libhello.so.0 \
  5.     -o libhello.so.0.0 libhello.o -lc
复制代码

出现这样的错误:
  1. [root@root Other]# gcc -g -shared -Wl, -libhello.so, -o libhello.so.0.0 libhello.o -lc
  2. gcc -g -shared -Wl, -libhello.so, -o libhello.so.0.0 libhello.o -lc
  3. /usr/bin/ld: : No such file: No such file or directory
  4. collect2: ld returned 1 exit status
  5. [root@root Other]#
复制代码
发表于 2006-2-24 19:01:43 | 显示全部楼层
请看《linux1.0核心游记》,对共享库有详细描述
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-25 14:33:57 | 显示全部楼层
这里的确-soname有没有写错。如果用dynamic libs那么前面就已经形成.so库了,即在做dynamic前就必须做shared。只是在做shared时的bin,要用.so去编译bin;而做dynamic时的bin不需要用.so  编译 因为在bin的源码中已经用了.so
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-28 17:45:52 | 显示全部楼层
1:不知道有谁能真正理解动态库与共享库的区别,反正鄙人还没理解透。共享库“.so"的使用是编译一个bin程序时用gcc参数加进去的,而动态库呢?是一个bin或另一个code模块中。调用dlopen()/dlclose()/dlsym()/dlerror()等。
2:共享库是在使用它的bin或一个模块的code启动时调用,而动态库呢? 是在用函数打开.so共享库的语句时被调用。动态库是共享库的一种(都是以.so结尾的),只不过是共享库在编译时加入,而动态库是在语句执行处调用
回复 支持 反对

使用道具 举报

发表于 2006-3-1 13:19:32 | 显示全部楼层
动态库也叫共享库,两者指的是同一个东西。
你所说的只是两种使用动态库的方式
回复 支持 反对

使用道具 举报

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

本版积分规则

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