静态库和动态库

原创

 有差不多一年没怎么写博客了,主要是现在做的工作,市场很小,如果把写的教程都放在网上,就是教会徒弟饿死师傅。写了很多教程,都是放在本机,防止以后自己忘记。

最近在开发一款游戏,COCOSLUA的,需要给LUA代码加密,加密算法是C++写的,不能暴露,把代码封装成库,给下面的程序员使用,看了一些书,把心得记录一下。

首先需要了解代码的编译过程,主要有编译和链接两个部分,这里以WINDOS上编译C++作为例子:

1.预处理  处理 头文件、条件编译指令和宏定义,获得全部是常量的代码。

2.优化编译  优化代码,编译成汇编代码(汇编代码主要给人看的)

3.汇编   根据操作系统将汇编代码转换成机器码(机器码是二进制,机器可以直接执行的,每一个汇编语都对应一条机器码)一个CPP文件生成一个目标文件(.obj)  

4.链接   整合所有的目标文件(.obj) ,重定位符号(变量)的虚拟地址 最后和 需要的静态库(.lib) 链接成一个可执行的文件(.exe)。

静态库和动态库

在windos中   机器码.obj    静态库.lib     动态库为.dll
在linux中       机器码.o       静态库.a      动态库为.so

命名规范 libxxx.a

静态库:是一堆目标文件机器码的集合,只在链接阶段参与,程序中要用到的地方都会拷贝一份过去,如果有10个地方用到,就会有10分拷贝,生成的最终文件会比较大,静态库一般不会引用其他库。

特点:隐藏源码,可复用,模块化分工合作。效率相对高一点点,更改一次静态库都需要重新编译,文件大。

动态库:也叫共享库,只在程序运行阶段参与,与编译无关。只有在程序执行时, 那些需要的函数代码才被拷贝到内存中,内存中只有一份拷贝, 其他用到的地方通过引用表公用一份拷贝。

特点:隐藏源码,可复用,模块化分工合作,节省内存和执行文件大小。修改模块功能只需要替换那个动态库就行了。另外苹果不支持动态库 ,程序在执行时有可能需要用到其他的动态库。

 

总结: 把C++代码里写的对LUA代码加密算法封装,为安卓生成 动态库.so ,为苹果生产 静态库.a     

 

你可能感兴趣的:(COCOSLUA,C++,其他)