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

关于动态库.so和静态库.a的问题

    来源: 互联网  发布时间:2017-04-04

    本文导语:  我现在编译的A.so库中使用到了B.a库中的函数,生产A.so过程没有问题。现在需要编译C.c程序,需要A.so库,如果C.c文件中没有调用   B.a中的函数那么编译过程中会出现提示A.so中某个函数没有定义,这个函数其实是在B....

我现在编译的A.so库中使用到了B.a库中的函数,生产A.so过程没有问题。现在需要编译C.c程序,需要A.so库,如果C.c文件中没有调用   B.a中的函数那么编译过程中会出现提示A.so中某个函数没有定义,这个函数其实是在B.a中定义的,但是如果C.c中调用了B.a的函数就不会出这个问题了,求大虾帮助。

|
楼主的描述不准确,
是不是说:
当c.c没调用B.a中的函数时,你在编译时就没有添加-lB 呢?
当C.c中调用了B.a中的函数时,你在编译时就会添加上-lB,,,所以编译没问题呢?

告诉你是为什么,
因为你在用B.a生成A.so时,,B.a本身并没有被编译进A.so中,, 不信你可以用nm -u A.so查看下A.so中未定义的符号是不是就是B.a中的函数.
所以当你在C.c中调用了B.a中函数时,你会在编译时加上-lB,,,所以能成功.
而你没加-lB时,就不会成功.因为B.a中的函数确实在A.so中未定义.
这是因为默认情况下gcc在链接时会去除未使用的函数,包括生成动态库时(没有运行程序直接使用).

要想让A.so将B.a完全包含进去的解决方法:
假设A.so的.c文件只有a.c的话.
gcc -shared -fpic -Wl,--whole-archive libB.a -Wl,--no-whole-archive a.c -o libA.so 
这样不管你使用不使用B.a中函数,在编译C.c时,都不用指定-lB了.问题也就解决了.
你可以再用nm --defined-only libA.so看的话,,发现B.a的函数都在libA.so中定义了...


|
你没有加载so 库把?make file ne?

    
 
 

您可能感兴趣的文章:

  • 静态库,动态库,静态链接和动态链接
  • 静态库动态库同时存在时,如何指定使用静态库
  • linux动态链接库里全局变量和静态变量会导致动态库不可重入吗?
  • Linux 动态库,静态库的一些疑惑
  • 动态编译与静态编译驱动程式疑问?
  • 如何将动态可执行文件打包为静态
  • 请问unix/linux下动态连接库和静态连接库有什么区别?
  • 用静态库还是动态库?
  • driver的静态加载和动态加载占用内存问题
  • 送分.......linux下动态库和静态库的后缀名是什么呢?
  • gcc 做一个动态库 要包含一个静态库
  • .a文件的动态链接和静态链接问题
  • linux中的动态库和静态库的问题
  • linux中,动态库中的函数如何调用静态库中的函数
  • unix 下如何调用动态链接库和静态库结尾的文件(c语言)
  • JSP下动态INCLUDE与静态INCLUDE的区别分析
  • 送分.......关于动态库静态库.. 来接分吧..
  • 请问做动态库和静态库在使用上有什么区别?
  • 动态库链接 变为 静态库链接问题
  • JSP中动态include与静态include的区别介绍
  • 可执行程序加载动态库 和 动态库加载动态库 的动态库初始化的问题
  • 动态加载动态库问题--在线等
  • 程序发布的问题(动态连接库的问题)
  • 最菜的问题—关于linux“动态库”的问题
  • 关于断线重拨和动态域名的问题
  • 关于动态库的问题,谢谢!
  • linux动态路由问题
  • 一个动态库的小问题,在线等~~~
  • 与动态库有关得问题!
  • Linux动态库编译问题
  • 【急】动态库问题请教
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 动态库调用动态库
  • Linux下c函数dlopen实现加载动态库so文件代码举例
  • linux能否成为动态域名解析客户端的动态域名解析服务器?
  • 关于动态菜单项,注意,不是动态菜单(一定给分)
  • Linux下,怎么确定动态库的绝对位置(动态库里面确定)?
  • 为什么动态生成的图片,JSP不能动态的获得
  • 请问:能不能动态的运行时生成对象(动态定义对象), 要涉及到哪些技术, 反射,序列化...??
  • C#实现动态显示及动态移除图片方法
  • 在linux下(c++),如何动态调用 动态库(.so)? 为什么我编译报错:undefined reference to "dlopen"
  • JSP动态缓存 JimStoneCache
  • 怎么调试unix动态库.
  • 如何调用动态
  • 内核与动态(共享)库
  • 动态库中的变量(全局和自动变量)在什么地方存储,内存在什么位置分配?
  • gdb调试动态链接库
  • Jquery动态控制鼠标位置(层的动态显示与隐藏动画)
  • linux下链接一个动态库后原有程序不能正常运行
  • 请教一下Linux的动态库加载方式(是启动加载还是运行加载?)
  • linux能否使用*.DLL型动态链接库
  • 关于动态库的Makefile的编写


  • 站内导航:


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

    ©2012-2021,