printf linux 头文件,printf()函数 [转]linux调用动态库so文件(2)

) cool:~$ ls cool:~$ pwd /home/fuckyou cool:~$ cd / cool:/$ ls public/ cdrom/ lib/ mnt/ tmp/ www/ readme dev/ linux* proc/ usr/ bin/ etc/ local/ root/ var/ boot/ home/ lost+found/ sbin/ cool:/$ cd etc telnet> quit (好想睡呀 。

Windows下,动态库常以.dll结尾。(通常C:\windows\System32等目录下存在大量系统提供的以.dll结尾的动态库文件)

3、 动态库与静态库之间的区别

静态库是指编译连接时,把库文件的代码全部加入到可执行文件中,所以生成的文件较大,但运行时,就不再需要库文件了。即,程序与静态库编译链接后,即使删除静态库文件,程序也可正常执行。

动态库正好相反,在编译链接时,没有把库文件的代码加入到可执行文件中,所以生成的文件较小,但运行时,仍需要加载库文件。即,程序只在执行启动时才加载动态库,如果删除动态库文件,程序将会因为无法读取动态库而产生异常。

二、Linux下动态调用动态库

备注:以下linux实例说明都是在RedHat 5.1系统+ gcc 版本 4.1.2 20080704 (Red Hat4.1.2-46)上实现。printf()函数

1、 .so动态库的生成

可使用gcc或者g++编译器生成动态库文件(此处以g++编译器为例)

g++ -shared -fPIC -c XXX.cpp

g++ -shared -fPIC -o XXX.so XXX.o

2、 .so动态库的动态调用接口函数说明

这种方式比较简单易行,在里面加上类似下面的语句,到底这些cad病毒做了什么手脚.lsp,你可以搜索所有acad*.lsp,任何操作起来都没有难度,在弹出的加载卸载应用程序对话框中,可以找到启动组.lsp或acadxxxx,点击此按钮就可以需要启动时自动加载的程序加进去这些工具手动加载后就可以执行,acaddoc,删除掉后可以看看cad是否恢复正常,可以将历史记录列表中加载过的程序添加到启动组中,但每次用的时候都要加载挺麻烦的,能不能在启动软件的时候把自己常用的插件加载进来,看看在图纸所在目录是否有此类文件:。

开发环境要使用最新的sdk才能支持最新的操作系统,所以要用#import msxml6.dll,但是到了运行环境,程序并不会直接加载msxml6.dll,而是通过cocreateinstance来加载的,传递的是progid或者clsid,系统会在注册表中找到对应的dll文件,如果运行在vista下,系统会帮你加载msxml6.dll,如果在xp环境下,系统帮你加载msxml.dll。

ios下jit错误是比较常见的,因为ios不支持jit动态编译,所以需要改为合适的aot静态编译。

动态库的调用关系可以在需要调用动态库的程序编译时,通过g++的-l和-l命令来指定。

g++ -g -o test test.cpp –L/root/src/lib –ltest_so1

(此处,我们重点讲解动态库的动态调用的方法,关于静态的通过g++编译命令调用的方式不作详细讲解,具体相关内容可上网查询)

Linux下,提供专门的一组API用于完成打开动态库,查找符号,处理出错,关闭动态库等功能。

下面对这些接口函数逐一介绍(调用这些接口时,需引用头文件#include ):

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/ruanjian/article-90978-2.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值