21-软件安装-原始码与Tarball
来源:互联网 发布:编程培训周末班 编辑:程序博客网 时间:2024/05/17 19:16
Please indicate the source: http://blog.csdn.net/gaoxiangnumber1
Welcome to my github: https://github.com/gaoxiangnumber1
21.2 使用传统程序语言进行编译
21.2.1 单一程序:印出 Hello World
21.2.2 主、子程序链接:子程序的编译
xiang :~ $ cat main.c#include <stdio.h>int main(){ printf("gaoxiangnumber1\n"); fun();}xiang :~ $ cat fun.c #include <stdio.h>void fun(){ printf("This is fun.\n");}xiang :~ $ gcc -c main.c fun.c xiang :~ $ ll main* fun*-rw-rw-r-- 1 xiang xiang 62 10月 15 19:32 fun.c-rw-rw-r-- 1 xiang xiang 1.5K 10月 15 19:33 fun.o-rw-rw-r-- 1 xiang xiang 73 10月 15 19:31 main.c-rw-rw-r-- 1 xiang xiang 1.6K 10月 15 19:33 main.oxiang :~ $ gcc -o main main.o fun.oxiang :~ $ ll main* fun*-rw-rw-r-- 1 xiang xiang 62 10月 15 19:32 fun.c-rw-rw-r-- 1 xiang xiang 1.5K 10月 15 19:33 fun.o-rwxrwxr-x 1 xiang xiang 8.4K 10月 15 19:33 main-rw-rw-r-- 1 xiang xiang 73 10月 15 19:31 main.c-rw-rw-r-- 1 xiang xiang 1.6K 10月 15 19:33 main.oxiang :~ $ ./main gaoxiangnumber1This is fun.
- 当源文件有多个时,需要先产生目标文件,然后再链接成可执行文件。
21.2.3呼叫外部函式库:加入链接的函式库
gcc sin.c -lm -I/usr/include -L/lib -L/lib64
l 加入某函式库
m 是libm.so函式库,lib与扩展名(.a或.so)不需要写
L 后接的路径表示需要的函式库libm.so到/lib或/lib64中搜索。函式库默认存放在/lib与/lib64
I 后接的路径是设定去搜索相关include文件的目录。默认存放在/usr/include
21.2.4 gcc 的简易用法(编译、参数与链结)
- -c 仅将源码编译成目标文件.o,不链接
-O 在编译时优化
-o 将编译的结果输出成特定文件名
-Wall 显示警告信息
21.3 用 make 进行宏编译
21.3.1 为什么要用 make
- 在编译完成后,若修改某原始码文件,make仅会针对被修改的文件进行编译,其它的object file不变动。
21.3.2 makefile的基本语法与变量
target: 目标文件1 目标文件2<tab>gcc -o 执行文件 目标文件1 目标文件2
- 目标文件是具有相关性的object files。
命令行必须以tab开头。
#接注释。
target与目标文件以:隔开。 - 变量语法为:
- 变量与变量内容以=隔开,两边可以有空格,不能有
:
- 变量左边不能有tab
- 变量最好是大写字母
- 以
${变量}
或$(变量)
使用变量
- 变量与变量内容以=隔开,两边可以有空格,不能有
- gcc在编译时,会主动读取CFLAGS环境变量,所以可以在shell定义、在makefile文件中定义、在指令列中定义。
root: ~ # CFLAGS="-Wall" make clean main#也可以root: ~ # vi makefileLIBS = -lmOBJS = main.o haha.o sin_value.o cos_value.oCFLAGS = -Wallmain: ${OBJS} gcc -o main ${OBJS} ${LIBS}clean: rm -f main ${OBJS}
- 环境变量读取优先级:
- make指令列后面加上的环境变量
- makefile中指定的环境变量
- shell原来有的环境变量
$@
代表target。可将makefile改成:
root: ~ # vi makefileLIBS = -lmOBJS = main.o haha.o sin_value.o cos_value.oCFLAGS = -Wallmain: ${OBJS} gcc -o $@ ${OBJS} ${LIBS} #$@是mainclean: rm -f main ${OBJS}
21.5 函式库管理
21.5.1动态与静态函式库
静态函式库特点
- 扩展名为
.a
。 - 在编译时会直接整合到执行程序中。最大的优点是编译成功的可执行文件可以独立执行,不需要读取外部函式库。
- 只要函式库升级,所有将此函式库纳入的程序都需要重新编译。
动态函式库特点
- 扩展名为
.so
- 在编译时,程序只有一个Pointer的位置,即当程序要用到函式库时,才会读取函式库。编译出的程序不能独立执行,函式库文件必须存在,且函式库的目录不能改变。
- 当函式库升级后,程序不需要重新编译,因为程序会直接指向新的函式库文件(前提是函式库新旧版本的文件名相同)。
- 绝大多数函式库存放在/lib64、/lib。kernel的函式库放在/lib/modules。
21.5.2 ldconfig 与 /etc/ld.so.conf
21.5.3 程序的动态函式库解析:ldd
ldd [-vdr] [filename]
- -v 列出所有信息
-d 重新列出资料有遗失的link
-r 列出ELF有关的错误内容
Please indicate the source: http://blog.csdn.net/gaoxiangnumber1
Welcome to my github: https://github.com/gaoxiangnumber1
0 0
- 21-软件安装-原始码与Tarball
- 软件安装:原始码与Tarball
- 第二十二章、软件安装:原始码与 Tarball
- 第22章 软件安装 原始码与tarball
- 第二十二章 软件安装:原始码与Tarball
- 鸟哥的Linux私房菜10.28 软件安装:原始码与 Tarball
- Note For Linux By Jes(16)-软件安装:原始码与 Tarball
- 鸟哥的Linux私房菜(基础篇)- 第二十二章、软件安装:原始码与 Tarball
- 软件安装:源码 与 tarball
- 软件安装:源码与Tarball
- 第22章 软件安装:源码与Tarball
- [Linux] 软件源码安装 - Tarball
- [Linux] 软件源码安装 - Tarball
- 使用tarball以编译原码方式安装软件
- Linux 下tarball 安装软件总结
- Linux 学习笔记 -- 第五部分 Linux 系统管理员 -- 第22章 软件安装:源码与 Tarball
- 《鸟哥的Linux私房菜》读书笔记:软件安装——源代码与Tarball
- tarball安装
- SQL常用的内置函数
- cocoapods repo切换至镜像
- Spark学习笔记
- ZStack 修改云主机模板
- MappingJackson2HttpMessageConverter配置导致声明式事务不启动
- 21-软件安装-原始码与Tarball
- java Stack类使用
- SFTP搭建
- js将网页中的table中的数据导入到excel中方法
- Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式
- 东京笔记-博客没更新原因和工作生活分享
- android 关于WebView点击图片展示大图
- Android 中的 adapter
- SQL 语句调优 where 条件 数据类型 临时表 索引