gcc编译器是Linux环境下最常用的编译器,经常需要配合Shell 脚本对大型项目进行编译
一个简单的程序,命名为 test.c
#include<stdio.h>
int main()
{
printf("the first programe is Hello world \n");
}
执行
gcc test.c
默认生成一个 a.out 的文件
./a.out
在屏幕打印输出
the first programe is Hello world
使用参数 -o
该参数可以指定编译后输出的可执行文件的类型和文件名
gcc test.c -o test
或者
gcc -o test test.c
生成一个名为test的可执行文件。
使用参数-Wall
选项 -Wall
开启编译器几乎所有常用的警告──强烈建议你始终使用该选项。编译器有很多其他的警告选项,但 -Wall 是最常用的。默认情况下GCC 不会产生任何警告信息。当编写 C 或 C++ 程序时编译器警告非常有助于检测程序存在的问题。
本例中无任何警告,完全合乎语法规则
使用参数 -I
大写字母i
在 linux 下开发软件时,完全不使用第三方函数库的情况是比较少见的,通常来讲都需要借助一个或多个函数库的支持才能够完成相应的功能。从程序员的角度看,函数库实际上就是一些头文件( .h
)和库文件( .so
或者 .a
)的集合。虽然 Linux 下的大多数函数都默认将头文件放到/usr/include/
目录下,而库文件则放到 /usr/lib/
目录下,但并不是所有的情况都是这样。正因如此, GCC 在编译时必须有自己的办法来查找所需要的头文件和库文件。 GCC 采用搜索目录的办法来查找所需要的文件, -I 选项可以向 GCC 的头文件搜索路径中添加新的目录。例如,如果在/home/justin/include/
目录下有编译时所需要的头文件,为了让 GCC 能够顺利地找到它们,就可以使用 -I
选项:
使用I
指定头文件的路径
gcc foo.c -I /home/justin/include -o foo
下面是自己写的
使用参数 L
该参数用于寻找相应的库
使用方法
-L/opt/xxlab/lib
使用参数 - WI
-Wl,option
把选项option传递给连接器.如果option中含有逗号,就在逗号处分割成多个选项.
告诉编译器将后面的参数传递给链接器。
使用参数 -rpath
要使用这个参数需要遵循语法格式
使用这个可以不需要使用 -L 指定绝对路径的链接库。 -rpath
这个命令会自己寻找相应的链接库(动态库或静态库)
-Wl,--rpsth =/目录
-Wl,--rpath=/opt/etherlab/lib
Wl的作用是告诉gcc后面的内容就是传递给linker的参数
gcc -o test test.c -Wall -I/opt/etherlab/include \
-L/opt/etherlab/lib -Wl,--rpath=/opt/etherlab/lib -lethercat -lrt
这两个命令等价
gcc -o csp_test test.c -Wall -I/opt/etherlab/include \
-Wl,--rpath=/opt/etherlab/lib -lethercat -lrt
第二个命令没有指定绝对路径的链接库,但是只要有 -rpath 命令的存在,就会自动寻找到相应的动态库或者静态库