标签:可执行文件 文件 CMakeLists 动态 静态 生成 学习 -- txt
------------------ 2-27
首先 cmake . (. 表示CMakeLists.txt所在的目录,cmake就是通过CMakeLists.txt来生成makefile的) --> make(根据makefile里的规则开始编译,所以要和makefile在同目录) --> 生成CMakeLists.txt里定义的项目名称的可执行文件,最后执行一下就好了。 注意:cmake会在当前目录生成makefile等其它文件和源文件混在一起就很乱了,一般是建一个build文件夹在里面执行cmake ..
---------------- 2-28
编译过程:源文件.c/.h --> 预编译(处理#开头的预编译指令,如#inclide、#define等) --> 编译(语法、语义分析并优化) --> 汇编(将上一步整理的代码转为机器码) --> 链接(将编译出来的目标文件和代码里用到的库文件打包成最终的可执行文件)
静态库和动态库区别:
静态库在链接这一步的时候把自己直接加载到程序中;程序(可执行文件)运行时就不再需要该静态库,意味着如果库文件更新了,需要重新编译可执行文件;最终生成的可执行文件大
动态库在链接这一步的时候只是给了个接口;程序(可执行文件)运行时通过接口加载,所以程序(可执行文件)运行时还需要动态库存在,意味着库文件更新了,此可执行文件也就更新了;最终生成的可执行文件小
生成静态库和动态库:
无论静态库,还是动态库,都是由.o文件创建的。因此,我们必须将源程序hello.c通过gcc先编译成.o文件
Linux生成静态库:
gcc -c hello.c // 生成目标文件hello.o
ar crv libhello.a hello.o // 将目标文件hello.o 打包成静态库文件libhello.a
Linux使用静态库(假如静态库文件是libhello.a ,main.c要使用它):
gcc main.c -L . -lhello // -L 后面是静态库文件所在的目录,h-l加上库名,这个库名是去掉lib和后面的.a
Linux生成动态库:
gcc -fPIC -shared -o libhello.so hello.c // -fPIC 是为了能够在多个应用程序间共享,-shared指定生成动态库
Linux使用动态库:
gcc mian.c -o mian -L ./ -lhello // -L后面是库文件的路径,h-l加上库名,这个库名是去掉lib和后面的.so。注意:如上所说此可执行文件运行时,动态库还是要存在的,也就是说
linux动态、静态库&win动态、静态库:so、a & dll、lib
gcc ts.c -o ts:生成ts可执行文件
标签:可执行文件,文件,CMakeLists,动态,静态,生成,学习,--,txt 来源: https://www.cnblogs.com/fxw1/p/16061761.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。