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-12-18git仓库有更新,jenkins 自动触发拉代码怎么配置的?-icode9专业技术文章分享
- 2024-12-18Jenkins webhook 方式怎么配置指定的分支?-icode9专业技术文章分享
- 2024-12-13Linux C++项目实战入门教程
- 2024-12-13Linux C++编程项目实战入门教程
- 2024-12-11Linux部署Scrapy教程:新手入门指南
- 2024-12-11怎么将在本地创建的 Maven 仓库迁移到 Linux 服务器上?-icode9专业技术文章分享
- 2024-12-10Linux常用命令
- 2024-12-06谁看谁服! Linux 创始人对于进程和线程的理解是…
- 2024-12-04操作系统教程:新手入门及初级技巧详解
- 2024-12-04操作系统入门:新手必学指南