- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux下静态链接库和动态链接库编译和使用
Linux 下编译链接动静态库 2010年03月29日 星期一 17:11 Linux 版本是 Red Hat 9 ,内核版本是 2.4.18输入 which gcc 查看 gcc 的位置在 /usr/bin/gccgcc -v 查看 gcc 编译前的配置信息--prefix=/usr 说明了安装目录没有 --with-headers 说明默认的 include 就在安装目录下所以 gcc 默认的 include 目录是 /usr/include ,要包含另一个目录,可以用 -I dir 选项包含该目录,想要更方便的可以在 /etc/profile 中添加一个环境变量 C_INCLUDE_PATHC_INCLUDE_PATH=your include pathexport C_INCLUDE_PATHgcc 默认的 lib 目录很多,一般是 /lib 和 /usr/lib可以输入 gcc -print-search-dirs 查看同样可以在编译时通过 -L dir 来添加,也可以在 /etc/profile 中添加LD_LIBRARY_PATH=your ldlib pathexport LD_LIBRARY_PATH还有就是可以/etc/ld.so.conf中添加目录,这对于安装别的库很方便当然修改了库文件后需要运行一下ldconfig 自己制作交叉编译工具太复杂了,直接下一个arm-linux-gcc-3.4.1.tar.bz2 tar jxvf arm-linux-gcc-3.4.1.tar.bz2 -C /????????? 解压缩到根目录下 其实由于压缩包带的目录是 usr/local/arm/3.4.1所以实际还是在 /usr/local/arm/3.4.1 目录下在bin中可以看到各个工具 arm-linux-gcc ...输入 ./arm-linux-gcc -v 可以看到配置信息有 --with-headers=/usr/local/arm/3.4.1/arm-linux/include 说明了默认的include目录输入 ./arm-linux-gcc -print-search-dirs 查看有哪些信誉好的足球投注网站的 lib 目录,主要的库文件还是在/usr/local/arm/3.4.1/arm-linux/lib目录下.arm-linux-gcc 3.4.1 可以用来编译2.6的内核而编译bootloader还是用原来的2.95.2版的 arm-linux-gcc 程序的预处理、编译、链接都可以由gcc完成,gcc会自动调用cpp来做预处理,ld来进行链接。其中对库的链接是很重要的一部分,有静态库和动态库两种,静态库以 .a 为后缀,ld会把静态库中的代码拷到待链接的程序中,形成完整的可执行的程序。而链接动态库生成可执行程序又分为静态调用和动态调用,静态调用是在程序中包含头文件直接调用库函数,也叫显式调用,程序被加载的同时也加载了库,在加载时完成真正的地址链接。而动态调用则不需要包含头文件,在程序中使用库加载函数dlopen来加载库,使用dlsym来获取所需函数的地址,所以是在需要时才加载动态库,也是隐式调用。这样编译时和库就没有关系,不需要链接了。 对各种方式都给个实例就比较好理解了使用库主要是为了实现代码的共享,所以一些能共用的函数放在一起写成库就最好了。先vi add.c 代码为 int add(int x,int y){???? return x+y;}int sub(int x,int y){???? return x-y;} 然后 vi add.h 代码为 int add(int x,int y);int sub(int x,int y);需要把 add.c 编译成.o文件,然后再用 ar 命令生成静态库gcc -c add.car -rc libadd.a add.o 遵循静态库命名的规则 lib + 名字 + .a下来可以编写测试文件test.c#include stdio.h#include add.hvoid main(){??? printf(add(5,4) is %d\n,add(5,4));??? printf(sub(5,4) is %d\n,sub(5,4));}$nm libtest.a //nm工具可以打印出库中的涉及到的所有符号,库既可以是静态的也可以是动态的。nm列出的符号有很多, 常见的有三种然后执行程序就可以看到成功了。把add.c编译成动态链接库1)$gcc -fPIC -o libadd.o -c add.c 2)$gcc -shared -o libadd.so libadd.o 也
您可能关注的文档
最近下载
- XX国际建设项目竣工环境保护验收监测报告PPT汇报课件.pptx
- 40w机械白金机电3米并非子虚乌有.pdf VIP
- 四川乐山市市中区区属国有企业招聘笔试题库2023.pdf VIP
- 2025四川乐山市市中区国有企业选聘领导人员4人笔试参考题库附答案解析.docx VIP
- eVTOL飞行系统容错控制策略的技术现状与发展方向.docx VIP
- 小猪佩奇第一季台词本(11-20集).doc VIP
- 公司内部研发项目立项申请表.doc VIP
- 山东省职业指导师职业技能竞赛决赛考试题库(含答案).docx VIP
- 小猪佩奇第一季(1-10)集中英互译台词.pdf VIP
- 文艺演出服务项目组织机构及人员配备.doc VIP
文档评论(0)