gcc常用参数快速查询

官网: link
在这里插入图片描述

常用命令行参数

-E :只做预处理,不编译
-S :只编译,将C程序编译为汇编文件
-c :只汇编,不链接。
-o :指定输出的文件名

-W,在编译中开启一些额外的警告(warning)信息。-Wall,将所有的警告信息全开。
-l(小写的L) 指定所使用到的函数库,链接器会尝试链接名为libxxx.a/.so的函数库。
-L,指定函数库所在的文件夹,链接器会尝试搜索/path/to/lib文件夹。
-I(大写的i), 指定头文件所在的文件夹,预编译器会尝试搜索/path/to/include文件夹。

-O(大写的字母o),编译器对代码进行自动优化编译,输出效率更高的可执行文件。
-O 后面还可以跟上数字指定优化级别,-O0 表示没有优化, -O1 为默认值,-O3 优化级别最高
-static 禁止使用动态库
-share 尽量使用动态库

静态库编译及使用

静态库编译:
gcc -c hello.c得到hello.o文件
静态库使用:
法一、gcc -o hello main.c -L. –lmyhello
法二、gcc -o hello main.c libmyhello.a
法三、gcc -c main.c;gcc -o hello main.o libmyhello.a

-lmyhello 编译器在给出的名字前面加上lib,后面加上.so或.a来
确定库的名称libmyhello.so或libmyhello.a并进行查找

静态链接时搜索路径顺序:

  1. ld(GNU linker)会去找GCC命令中的参数-L
  2. gcc的环境变量LIBRARY_PATH
  3. 内定目录 /lib /usr/lib /usr/local/lib

动态库编译及使用

动态库编译:
gcc -shared -fPIC -o libmyhello.so hello.o

  • -shared 该选项指定生成动态连接库
  • -fPIC 作用于编译阶段,产生位置无关代码(Position-Independent Code)

动态库使用:
gcc -o hello main.c -L. -lmyhello 前提为需将动态库复制到/usr/lib
或者 gcc main.c libmyhello.so -o hello

动态链接时搜索路径顺序:

  1. 编译目标代码时指定的动态库搜索路径
  2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
  3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
  4. 默认的动态库搜索路径/lib
  5. 默认的动态库搜索路径/usr/lib
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值