linux系统编程时使用数学函数库
linux中自定义函数优缺点?
linux中自定义函数优缺点?
在Linux操作系统中,函数库根据是否被编译到程序内部而分为静态函数库和动态函数库。
静态函数库
扩展名(.a)
编译行为
静态函数库在编译的时候会被直接整合到执行程序之中,因此执行程序会大一些。
可以独立执行
由于静态函数库会被整合到执行程序中,即执行程序相当于已经有了静态函数库的一个副本了,那么执行程序便可以独立执行,与原静态函数库的状态无关了。
升级
因为函数库会跟着源程序一起编译,因此,如果函数库升级了,那么使用该函数库的源程序需要重新编译生成新的执行程序。
动态函数库
扩展名(.so)
编译行为
包含动态函数库的源程序在编译的时候,使用动态函数库的地方只有一个指向函数库的“指针”而已,并没有将动态函数库整合进来,然后在执行程序要使用到函数库的时候才根据这个“指针”去调用相应的动态函数库,所以执行文件比较小。
不能独立执行
因为在编译的时候,动态函数库在执行程序中只是一个“指针”的存在,并且在执行的时候调用,因此,动态函数库需要在程序执行的时候存在,并且函数库的目录要跟程序中的“指针”保持一致。
升级
因为编译的时候函数库只是留下一个地址,因此只要地址不变,函数库变化了也不会影响程序的执行。因此,在动态函数库升级的时候,源程序不需要重新编译。(这里可以看出,动态函数库本身似乎可以很容易地进行修改,比较重要的是其存放的位置,如果位置发生改变,会导致使用该函数库的程序在执行时发生错误)
对于目前的开发比较倾向于动态函数库,原因是升级容易。因此,我们也需要了解我们的二进制执行文件到底使用了哪些动态函数库。而ldd命令可以查询到。
**ldd [-vdr] [filename]**
参数:
-v: 列出所有内容信息;
-d: 重新将数据有丢失的link点显示出来;
-r: 将ELF有关的错误内容显式出来。
1
2
3
4
5
1
2
3
4
5
例如我们常用到的ls命令,我们可以查看其使用到的动态函数库。
我们先用which命令查看ls命令的目录。
linux下用什么函数判断字符串的编码方式?
如题,假设给你一个字符数组
char a[]abc;
在它的编码中gb2312和utf-8都一样
对任意一个字符而言,并没有编码格式的概念。同样的一个字母,在不同编码集里面代表不同的东西,当然也有可能恰好代表相同的东西。
编码集并不是文本本身的属性,而是观察者的角度,也就是说你用什么编码集来观察这段文本。——从程序的角度就是,你用什么软件去打开它。——编码识别大多通过非法字符进行识别,也就是说仅仅当我们判断具有非法的utf-8字符序列的时候,我们判断一个文本“不是utf-8”编码,但是我们永远无法判断一个文本“是utf-8编码”。——如果不包含任何非法字符,那么你就可以用任何编码去查看他:
例如“逍遥”如果使用BIG5码,但你还是可以使用GBK码查看这两个字,最后得到的是“殊换”。显然这两个词都是合法的,如果仅仅给你这个词,那么你无论从理论还是实际上都不可能知道原文的作者究竟是想表达“逍遥”还是“殊换“。