当前位置:  技术问答>linux和unix

多次连接静态库

    来源: 互联网  发布时间:2016-07-24

    本文导语:  程序链接了 A.so , B.so , 假设 A,B两个动态库里面有分别有 funcA(), funcB(),这两个函数调用了 funcC(), funcC定义在 C.a 库里, A.so, B.so都静态连接 C.a . 问题如下: 1. 这种连接方式有问题否? 程序里是否存在了两份fun...

程序链接了 A.so , B.so , 假设 A,B两个动态库里面有分别有 funcA(), funcB(),这两个函数调用了 funcC(), funcC定义在
C.a 库里, A.so, B.so都静态连接 C.a . 问题如下:

1. 这种连接方式有问题否? 程序里是否存在了两份funcC() 代码?
2. 假如C.a 里又定义了一个全局变量 g_base , 那么在 A,B库里分别调用该全局变量,会存在什么问题?
3. 关于动态连接与静态连接,我如何预测会出现什么情况或者问题, 关键点在哪里? (例如函数调用,数据存放等方面)  谢谢!~~~

|
1.是存在两份func代码
2.我认为可以,静态库的结构比较简单,其实就是把原来的目标代码放在一起,链接程序根据每一份目标代码的符号表查找相应的符号(函数和变量的名字),找到的话就把该函数里面需要定位的进行定位,然后将整块函数代码放进可执行文件里,若是找不到需要的函数就报错退出。
3.可以通过查看可执行文件,关键点在哪儿不太清楚,推荐《深入理解计算机系统》第7章
祝快乐

|
1. A.so,B.so里都存在有funcC()的代码,程序里只是调用 A.so, B.so里的funcA()或funcB(),
   只是一个调用,而不保存funcA, 或funcB, 或funcC 等的代码

2. 在静态库里定义全局变量,该全局变量在整个进程空间是有效的。所以A,B调用需要考虑对变量的保护问题,避免冲突。

3. 我不清楚你的意思。

|

1. 没有问题,A.so和B.so都存在funcC()的目标代码。

2. 分别调用,可能会存不同步。

3. http://man.chinaunix.net/linux/debian/debian_learning/ch12s03.html

|


1. 在内存里面会有funcC()的两份代码。主调程序里面没有,因为只是动态链接两个共享库。
2。应该不会有问题,A,B都分别有C的数据段的独立副本。
3。一点经验:当库中含有全局对象时,可能会出现情况。

|
1、这种连接没有问题,在A.so和B.so都独立存在funcC()函数的拷贝。
2、全局变量g_base只会被定义一次,而且放在进程的数据段中。
   如果是多线程引用,注意加锁就可以了。
3、尽量不要在动态库中定义全局变量或静态变量,也不要在一个动态库中分配内存,然后在另外一个动态库中释放。

    
 
 

您可能感兴趣的文章:

  • linux 生成静态库的时候怎么连接别的静态库
  • 请问unix/linux下动态连接库和静态连接库有什么区别?
  • gcc的静态库.lib怎末在编译的时候连接。对了静态库是自己的???
  • 一个静态库包含多个函数,应用程序连接了库中的某个函数,应用程序目标代码中是否还包含了该静态库中的其他函数代码?
  • 动态连接库和静态连接库的问题 在线等待.......!!!
  • 见鬼了,为什么死活不能使用静态连接???
  • makefile中如何只连接静态库?
  • 请教:java中如何调用linux下的静态连接库.a文件?
  • 请教:java中如何调用linux下的静态连接库.a文件?
  • 在linux下用gcc编译时能不能实现“选择”的静态连接呢?
  • 用ar做了个静态库,连接的时候总是说找不到函数定义,好烦啊????????????????
  • 请教:java中如何调用linux下的静态连接库.a文件?
  • 静态方式调用so,连接时,从哪取的符号? (windows上.dll可以有对应的导出库.lib)
  • GCC中静态连接和动态连接的区别(LINUX下)
  • .net/c#/asp.net iis7站长之家
  • make 问题:如何生成静态连接库?
  • 无法连接静态库??
  • 自定义共享库的无法静态连接问题:神啊,救救我吧
  • Debian6在VMWare7上用Host-only方式连接网络,无法设置设置静态IP
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 什么是socket的长连接,以及如何实现长连接,长连接和短连接有什么区别?
  • 如何在windows上远程连接centOS桌面
  • 建立长连接的SOCET通讯后,如何检查长连接的有效性,如何获知连接状态
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • Oracle 表连接方式(内连接/外连接/自连接) 详解
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • 关于inetd。我做了一个测试程序,想计算ftp最多能有多少了连接,我发现当连接到1020次就不可以连接了,哪位大侠知道如何做才能将连接数量增加至10000呢??
  • php中操作memcache的类及成员列表及php下如何连接memched服务器
  • 哪位给解释一下长连接和短连接的区别?
  • mysql jdbc连接mysql数据库步骤及常见参数详解
  • ssh连接得通虚拟机,连接不通隔壁宿舍?
  • windows server2012无法连接无线网络解决方法(windows无线连接)
  • fedora15 KDE桌面下能连接WLAN,GNOME下能搜到信号,就是连接不上,。。。。
  • linux 有线连接了却显示有线连接断开是怎么回事
  • 建立一个ftp数据连接并传送或接受完毕一些数据后,能否不关闭此数据连接,下次接着用?
  • oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法
  • LINUX中连接C++的库怎么连接.库在什么位置,还有什么特殊命令吗?
  • socket 断开连接如何再恢复连接
  • 请问连接本机数据库的JDBC,和连接远程的JDBC有没有区别?
  • 大家有多少web application是直接连接数据库的?又有多少是通过weblogic或websphere之类连接的?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3