静态编译和动态编译的区别

ricciinhp 2015-01-12 04:42:59
工程量偏大,所以不可能直接贴源码的,我说下我遇到的问题:

我这边封了一个库,然后为了测试这个库有没有什么问题,就写了调用这个库接口的一个简单的脚本(库本身和测试脚本——就一个main.cpp),问题来了:
如果说我把这个main.cpp和库的源文件一起编译形成一个应用程序,那么程序正常运行;
但是如果我把源文件编译成一个单独的库,然后把测试程序编译成一个应用,然后当这个应用运行时动态加载前面的那个库,程序运行时就出问题了

请问能不能大致分析出到底是源码的问题还是编译链接的问题,坛子里哪位大牦也遇到过这个问题,最后如何解决的?
...全文
863 44 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2015-01-13
  • 打赏
  • 举报
回复
还能直接来点输出?
mymtom 2015-01-13
  • 打赏
  • 举报
回复
编译库的时候有没有用 gcc -fPIC 选项? 动态加载用了dlopen吗?
mymtom 2015-01-13
  • 打赏
  • 举报
回复
楼主倒是讲讲出啥子问题了嘛!
赵4老师 2015-01-13
  • 打赏
  • 举报
回复
引用 4 楼 ricciinhp 的回复:
并不是说运行时找不到库的问题,而是运行时出错的问题,可能是逻辑的问题,但是我不太确定 因为一般的逻辑问题都是segmentation default并dump出core的问题 我这边是分配内存时出现的问题——没办法分配内存了,分配不到内存因而程序直接退出 但测试程序和库的源文件编译在一起时就能正常分配内存并成功执行
使用top命令监视该程序运行时占用的内存随时间流逝有何变化。
ricciinhp 2015-01-13
  • 打赏
  • 举报
回复
引用 42 楼 zhao4zhong1 的回复:
其实我也不知道为什么“load为关键字,目前此功能只在HP-UX下有用”。
看你这样,尽显码农本色啊,另外你那个代码修改自身颇得本人精髓——偷偷告诉你的哟
ricciinhp 2015-01-13
  • 打赏
  • 举报
回复
引用 43 楼 zhao4zhong1 的回复:
[quote=引用 40 楼 ricciinhp 的回复:] 这样才好嘛,就是要让赵老师讲点实在的东西,不然老是复制黏贴我都觉得没意思咯
其实我复制粘贴次数越多的货才是越干的货。只不过很多码农不识货。[/quote] 呵呵,越干的货越要自己体会了才会明白的,你这样老是复制粘贴就像老和尚念经一样念给小和尚听,小和尚进了耳朵却没进心里,遇到问题还得让你复制粘贴,哈哈哈
赵4老师 2015-01-13
  • 打赏
  • 举报
回复
引用 40 楼 ricciinhp 的回复:
这样才好嘛,就是要让赵老师讲点实在的东西,不然老是复制黏贴我都觉得没意思咯
其实我复制粘贴次数越多的货才是越干的货。只不过很多码农不识货。
赵4老师 2015-01-13
  • 打赏
  • 举报
回复
其实我也不知道为什么“load为关键字,目前此功能只在HP-UX下有用”。
ricciinhp 2015-01-13
  • 打赏
  • 举报
回复
还是不行,本来我还想调试这个共享库呢 结果发现俺的gcc上根本没法捕捉load这个事件啊 只有assert/catch/exception/exec/fork/syscall/throw/vfork这个几个事件可以捕捉啊 如果真的要dump出binary来分析每一条汇编指令,估计到明年今天都不会有结果的 我直接去美国那边坛子上问了
ricciinhp 2015-01-13
  • 打赏
  • 举报
回复
这样才好嘛,就是要让赵老师讲点实在的东西,不然老是复制黏贴我都觉得没意思咯
赵4老师 2015-01-13
  • 打赏
  • 举报
回复
对于肯定有内存泄漏的库,我一般是这样调用的: ①开一个新进程,调用该库,最多循环调用比如100次(这个100是根据以往经验,比如超过200次就因该2B库内存泄漏或其它资源泄漏发生调用异常得来的),退出进程(该2B库泄漏的内存或其它资源被操作系统自动回收)。 重复步骤① 再次证明:活人是不会被尿憋死的! 楼主的愤青范,有点传染我了。大家看出来了吧。
ricciinhp 2015-01-13
  • 打赏
  • 举报
回复
谢谢赵老师鼓励,我再看看吧,不是我不想弄,只是这个问题牵涉到的东西实在太多了 这就好比在大海里捞根针一样让我蛋疼啊
赵4老师 2015-01-13
  • 打赏
  • 举报
回复 1
引用 35 楼 ricciinhp 的回复:
我好想结贴啊,可是到现在都没有遇到过这种问题的大锅来给我讲讲为啥会出现这个问题
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。 另外提醒:遇到别人以前没遇到的问题,这正是你提高和锻炼自己的绝佳时机。 有困难要上,没有困难,制造困难也要上! 加油!
ricciinhp 2015-01-13
  • 打赏
  • 举报
回复
感觉楼太长的童鞋可以直接看13楼,问题出在那里
ricciinhp 2015-01-13
  • 打赏
  • 举报
回复
我好想结贴啊,可是到现在都没有遇到过这种问题的大锅来给我讲讲为啥会出现这个问题
ricciinhp 2015-01-13
  • 打赏
  • 举报
回复
赵4老师 2015-01-13
  • 打赏
  • 举报
回复
激将法对我一般都很灵的。
ricciinhp 2015-01-13
  • 打赏
  • 举报
回复
赵老师果然没令我失望呢,深藏不漏的
ricciinhp 2015-01-13
  • 打赏
  • 举报
回复
引用 30 楼 zhao4zhong1 的回复:
[quote=引用 29 楼 ricciinhp 的回复:] 俺用的都是Google,谁用baidu那种只能用来搜搜种子,一点用都木有的玩具
http://www.baigoogledu.com/s.php?hl=zh-CN&q=%D1%DB%B8%DF%CA%D6%B5%CD[/quote]
赵4老师 2015-01-13
  • 打赏
  • 举报
回复
引用 29 楼 ricciinhp 的回复:
俺用的都是Google,谁用baidu那种只能用来搜搜种子,一点用都木有的玩具
http://www.baigoogledu.com/s.php?hl=zh-CN&q=%D1%DB%B8%DF%CA%D6%B5%CD
加载更多回复(25)

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧