Linux下gcc编译命令复习笔记
2022/3/27 7:23:09
本文主要是介绍Linux下gcc编译命令复习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
GCC
- 安装
sudo apt install gcc g++
- 查看版本
gcc/g++ -v/--version
- gcc常用参数选项
gcc编译选项 | 说明 |
---|---|
-E | 预处理指定的源文件,不进行编译 |
-S | 编译指定的源文件,但是不进行汇编 |
-c | 编译、汇编指定的源文件,但是不进行链接 |
-o [file1] [file2] / [file2] -o [file1] | 将文件 file2 编译成可执行文件 file1 |
-I directory | 指定 include 包含文件的搜索目录 |
-g | 在编译的时候,生成调试信息,该程序可以被调试器调试 |
-D | 在程序编译的时候,指定一个宏 |
-w | 不生成任何警告信息 |
-Wall | 生成所有警告信息 |
-On | n的取值范围:0~3。编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 |
-l | 在程序编译的时候,指定使用的库 |
-L | 指定编译的时候,搜索的库的路径。 |
-fPIC/fpic | 生成与位置无关的代码 |
-shared | 生成共享目标文件,通常用在建立共享库时 |
-std | 指定C方言,如:-std=c99,gcc默认的方言是GNU C |
库的制作
静态库
- 命名规则
- Linux下文件名为libxxx.a ,lib为固定前缀,.a为固定后缀,xxx为自定义库名。
- 制作
- gcc获得.o文件
- 将.o文件打包,使用ar工具
ar rcs libxxx.a xxx.o xxx.o
r - 将文件插入备存文件中
c - 建立备存文件
s - 索引
- 使用
使用gcc中的-l和-L指定使用制作好的静态库。(注意头文件预编译要用-I)
示例编译命令:
gcc main.c -o main -I ./include -l calc -L ./lib
注意上面使用的静态库文件名为libcalc.a
动态库
- 命名规则
- Linux下文件名为libxxx.so ,lib为固定前缀,.a为固定后缀,xxx为自定义库名。在Linux下位可执行文件。
- 制作
- gcc得到.o文件,得到和位置无关的代码
gcc -c -fpic/-FPIC file1.c file2.c - gcc得到动态库
gcc -shared file1.o file2.o -o libcalc.so
- gcc得到.o文件,得到和位置无关的代码
- 使用
如果使用和静态库文件一样的编译命令:
gcc main.c -o main -I ./include -l calc -L ./lib
然后执行生成的main程序时会发现报错:./main: error while loading shared libraries: libcalc.so: cannot open shared object file: No such file or directory
这是因为系统找不到我们制作的动态库的位置,只需要将动态库加入到可以被ld-linux.so能搜索的地方即可。它先后搜索elf文件的DT_RPATH段 ——> 环境变量LD_LIBRARY_PATH ——> /etc/ld.so.cache文件列表 ——> /lib/,/usr/lib目录找到库文件后将其载入内存。
解决:- 添加环境变量
直接在命令行输入export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<lib路径>
之后可以通过echo $LD_LIBRARY_PATH
查看环境变量是否修改成功,然后ldd main
查看能否找到库文件位置。
但是这种方法在关闭终端再重新打开后会失效,因为这是临时改变环境变量。
- 用户修改.bashrc
修改用户目录下的.bashrc
文件。在该文件最后一行加入刚才添加环境变量时的命令,保存退出后通过. ~/.bashrc
或source ~/.bashrc
使其生效。 - 系统修改profile
sudo修改/etc/profile
文件,在最后一行添加同样的命令后再保存退出后source。 - 有时可能需要重新打开终端使修改文件生效。
- 修改
/etc/ld.so.cache
文件
这个文件是二进制文件,需要通过修改/etc/ld.so.conf
文件间接配置。直接在文件内添加lib地址后保存退出然后运行sudo ldconfig
命令即可生效。 - 把库文件添加到库目录/lib/,/usr/lib下
不推荐,避免出现文件名冲突问题。
- 添加环境变量
这篇关于Linux下gcc编译命令复习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法
- 2024-08-21【Linux】gnome桌面环境切换KDE Plasma
- 2024-08-19如何安装 VMware Tools (macOS, Linux, Windows)
- 2024-08-15Linux部署Scrapy教程:入门级指南
- 2024-07-29linux命令行下好用的性能监控工具atop
- 2024-07-04Linux系统上离线升级SSH服务的具体操作步骤-icode9专业技术文章分享
- 2024-06-0600-macOS和Linux安装和管理多个Python版本
- 2024-03-30[译]漫画SELinux概念