免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3136 | 回复: 13
打印 上一主题 下一主题

请教编译器命令语法 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-27 14:52 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2009-04-27 14:54 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2009-04-27 14:57 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2009-04-27 22:02 |只看该作者

回复 #1 BetonArmEE 的帖子

这两个本质是一样的吧,-L. -lfunc就是说库路径在本地,使用库libfunc.a的库啊

论坛徽章:
0
5 [报告]
发表于 2009-04-27 22:05 |只看该作者
cc -shared -fPIC -o libfunc.so func1.o func2.o

再问
cc -o test test.o -L. -lfunc

cc -o test test.o libfunc.so
有什么区别?

这个就有一定得区别了,第一个是静态编译,在代码运行时是直接调用代码运行的,而后面的是将动态库的调用编译到运行程序的,如果你的LIBPATH或LD_LIBPATH路径没有定义,就无法找到要使用的动态库libfunc.so文件,导致文件运行失败

论坛徽章:
0
6 [报告]
发表于 2009-04-27 22:07 |只看该作者
再问,当前目录下只有libfunc.a时
cc -shared -fPIC test.so test.o -L. -lfunc

cc -shared -fPIC test.so test.o libfunc.a
有什么区别?

再问,当前目录下只有libfunc.so时
cc -shared -fPIC test.so test.o -L. -lfunc

cc -shared -fPIC test.so test.o libfunc.so
有什么区别?


我忘了顺序了,你可以试验一下,我不记得编译器缺省使用的是哪个了,如果两个全在,好像缺省是用静态方式的。

论坛徽章:
0
7 [报告]
发表于 2009-04-27 22:08 |只看该作者
没有太多区别,不过是前者在能搜索到动态库的前提下,会先考虑使用动态库来链接。
比如在/usr/lib中同时存在libm.so和libm.a,第一种方式会链接libm.so。
所以一般的编译命令都采用前者。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2009-04-28 10:16 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2009-04-28 10:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2009-04-28 10:29 |只看该作者
哪有强制使用链接动态库的参数!没听说过。
Linux识别二进制文件是通过文件的头部信息获取的,
所以你把so后缀改成什么都没关系。但是这时候不能使用默认的-lxxx的形式来默认连接动态库了。
因为gcc会使用这个so后缀来搜索。

其实我不明白你想问什么,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP