GCC使用参数简介

-I -i -L -l

  • -I 指定头文件路径
  • -i 指定头文件名字,不常用,因为一般都是直接在源文件开头include<*.h>
  • -L 指定库文件路径,但要注意,处理动态链接库时有2个路径:链接时路径和运行时路径,2个路径是分开的。-L 指定的只是链接时候的路径,有可能程序链接时候成功了,但在运行时不成功。因此还有加上运行时路径方可。使用-Wl,-rpath=<your path>。比如有个链接库libabc.so在当前目录,因此可以这样子指定:gcc -o main -L. -labc -Wl,-rpath=. 即可。
  • -l 指定库文件名字
  • #include <a.h>与#include "a.h"区别
    #include <a.h> 直接到系统指定的某些目录中去找某些头文件。
    #include “a.h” 先到源文件所在文件夹去找,然后再到系统指定的某些目录中去找某些头文件。
  • 头文件搜索顺序
  1. 源文件所在路径
  2. 参数-I指定的路径
    指定路径有多个路径时,按指定路径的顺序搜索
  3. gcc的环境变量
    C_INCLUDE_PATH
    CPLUS_INCLUDE_PATH
    OBJC_INCLUDE_PATH
  4. 找系统目录
    /usr/include
    /usr/local/include
    /usr/lib/gcc-xxxx/xxxx
  • -l 默认链接的静态库(.a) 还是动态库(.so)
    默认动态库,如果需要链接静态库,显式指定即可,如-l:lib*.a, 或者加上-static 参数
  • 静态库链接搜索路径的顺序
    -L参数指定路径 —> 系统环境变量路径LIBRARY_PATH —> 默认搜索路径/lib, /usr/lib, /usr/local/lib
  • 动态库链接搜索路径的顺序
    -L参数指定路径 —> 系统环境变量路径LD_LIBRARY_PATH —> 配置文件/etc/ld.so.conf中指定的动态库搜索路径 —>默认搜索路径/lib, /usr/lib, /usr/local/lib

--cflags --libs
手工来写链接参数总是很麻烦的,还好很多库开发包提供了生成链接参数的程序,名字一般叫xxxx-config,一般放在/usr/bin目录下,比如gtk1.2的链接参数生成程序是gtk-config,执行gtk-config --libs就能得到以下输出-L /usr/lib -L /usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm,这就是编译一个gtk1.2程序所需的gtk链接参数,xxx-config除了–libs参数外还有一个参数是--cflags用来生成头文件包含目录的,也就是-I参数,在下面我们将会讲到。你可以试试执行gtk-config --libs --cflags,看看输出结果。

除了xxx-config以外,现在新的开发包一般都用pkg-config来生成链接参数,使用方法跟xxx-config类似,但xxx-config是针对特定的开发包,但pkg-config包含很多开发包的链接参数的生成,用pkg-config --list-all命令可以列出所支持的所有开发包,pkg-config的用法就是pkg-config pagName --libs --cflags,其中pagName是包名,是pkg-config--list-all里列出名单中的一个,比如gtk1.2的名字就是gtk+pkg-config gtk+ --libs --cflags的作用跟gtk-config --libs --cflags是一样的。比如:gcc gtktest.c `pkg-config gtk+ --libs --cflags`.

-shared
表示生成动态链接库

-static
禁止使用共享库

-w
不生成警告信息

-Wall
生成所有警告信息

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值