Skip to content

Commit

Permalink
修改
Browse files Browse the repository at this point in the history
  • Loading branch information
arkingc committed Jul 23, 2018
1 parent cc26c8c commit e3b5ee5
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 3 deletions.
15 changes: 13 additions & 2 deletions Linux/Linux常用命令.md
Original file line number Diff line number Diff line change
Expand Up @@ -515,17 +515,28 @@ sudo tcpdump -i lo tcp port 9877
#### 使用方法
```bash
gcc/g++ [选项] 源文件 -o 目标文件名
gcc/g++ [选项] 源文件

选项:
-E:让编译器在预处理之后停止,不进行后续编译过程,得到.i文件
-S:让编译器在编译之后停止 ,不进行后续过程,得到.s文件
-c:生成机器码即二进制.o文件
-I 目录:指定头文件目录
-o:指定目标文件名
-g:在编译的时候生成调试信息
-Wall:生成所有警告信息
-I 目录:指定头文件的查找目录
生成动态链接库:
1. gcc/g++ -c -fPIC 源文件 -o 目标文件名
2. gcc -shared 目标文件名 -o 动态链接库名.so
生成静态链接库:
1. gcc/g++ -c 源文件 -o 目标文件名
2. ar -crv 静态链接库名.a 目标文件名
-l库名 -L 目录:引入链接库,-L指定查找该库的目录。如-lm表示引入libm.so
```
## 3.调试工具:gdb
-Wall:生成所有警告信息
#### 使用方法
```bash
Expand Down
3 changes: 2 additions & 1 deletion interview/C++.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@
* 7)[delete](https://github.com/arkingc/note/blob/master/C++/C++%E5%AF%B9%E8%B1%A1%E6%A8%A1%E5%9E%8B.md#1new)(步骤、delete与析构、可以delete空指针、可以delete动态const对象)
* 8)为什么要内存对齐?([性能原因、平台原因](temp/C++.md/#1为什么要内存对齐))
* 9)[struct内存对齐方式?](https://github.com/arkingc/llc/blob/master/cpp/alignment/struct.cpp#L1)
* 10)什么是内存泄露?如何检测与避免?(Mtrace,[valgrind](temp/C++.md/#2valgrind)
* 10)如何取消内存对其?(添加预处理指令`#pragma pack(1)`
* 11)什么是内存泄露?如何检测与避免?(Mtrace,[valgrind](temp/C++.md/#2valgrind)
* 11)[智能指针相关](https://mubu.com/doc/BGwWx-huk)
* 种类、区别、原理、能否管理动态数组
* shared_ptr(使用、计数的变化,get()函数要注意什么)
Expand Down
Binary file added pic/apue-processenv-18.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added pic/apue-processenv-19.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
30 changes: 30 additions & 0 deletions 操作系统/UNIX环境高级编程.md
Original file line number Diff line number Diff line change
Expand Up @@ -1916,6 +1916,36 @@ gcc hello1.c

可以使用`size a.out`观察上面两种情况下可执行文件正文和数据段的长度变化

### 静态链接库与动态链接库

链接库按是否被编译到程序内部而分成动态与静态链接库

* **静态链接库**
- 扩展名为`.a`,通常命名为`libxxx.a`
- 整合到可执行文件中,因此会导致可执行文件体积增大
- 可独立执行,而不需要再向外部要求读取链接库的内容
- 链接库升级时,需要重新编译生成可执行文件

<div align="center"> <img src="../pic/apue-processenv-18.png"/> </div>

* **动态链接库**
- 扩展名为`.so`,通常命名为`libxxx.so`
- 动态链接库的内容并没有整合到可执行文件中,需要使用时才去读取链接库,因此可执行文件体积较小
- 不能独立执行,链接库必须存在
- 链接库升级时,通常不需要重新编译

<div align="center"> <img src="../pic/apue-processenv-19.png"/> </div>

为了加速动态链接库的访问效率,一般需要将动态链接库载入内存中,从而避免读取磁盘。加载到高速缓存中的动态链接库所在的目录在文件`/etc/ld.so.conf`中指定,可以使用命令`ldconfig`将该文件中指定目录下的动态库读入缓存中

如果在编译时指定了动态链接库及库的路径,但是`/etc/ld.so.conf`文件中没有包含该路径,即这个动态链接库没有载入内存,那么运行生成的可执行文件会报错

`ldd`命令可以查看某个可执行的二进制文件含有什么动态链接库,对于前面的问题,如果某个动态链接库没有载入内存,即动态链接库的路径没有包含在文件`/etc/ld.so.conf`中。使用ldd查看时,这个库会显示“not found”

[生成/加载静态链接库与动态链接库](../Linux/Linux常用命令.md#2编译器gcc和g)

[图片来源](https://blog.csdn.net/freestyle4568world/article/details/49817799)

<br>

## 5.进程堆空间的管理
Expand Down

0 comments on commit e3b5ee5

Please sign in to comment.