1. gcc编译C程序过程,需要经过四个步骤:
2. gcc常用命令及使用方法
-c -g -o -O -D -U -I -L -lname -shared -w -W -Wall可以参照GCC手册
需要注意的是-g -O选项最好不要同时使用,因为调试和优化通常不兼容,使用后容易出现奇怪现象
下面利用Hello_world代码来练习以上命令:
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
- -c -g -o命令
---------------------------------------------------------------------------------
-c命令可以生成对应的.o文件
chenjiang@ubuntu:~/Linux_C/2/2_4$ gcc -c gcc_hello_world.c
chenjiang@ubuntu:~/Linux_C/2/2_4$ ls
gcc_hello_world.c gcc_hello_world.o
---------------------------------------------------------------------------------
使用以下命令可以生成可执行文件
chenjiang@ubuntu:~/Linux_C/2/2_4$ gcc -g gcc_hello_world.o -o gcc_hello_world
chenjiang@ubuntu:~/Linux_C/2/2_4$ ls
gcc_hello_world gcc_hello_world.c gcc_hello_world.o
chenjiang@ubuntu:~/Linux_C/2/2_4$ ./gcc_hello_world
Hello World!
- -D的使用
#include <stdio.h>
int main(void)
{
#ifdef GCC
printf("Hello GCC!\n");
#else
printf("Hello World!\n");
#endif
return 0;
}
如果在编译的时候不带宏定义,那么输出的应该为Hello World!,如果带宏定义'GCC‘,应该输出Hello GCC!
chenjiang@ubuntu:~/Linux_C/2/2_4$ gcc -g gcc_hello_world.c -o gcc_hello_world
chenjiang@ubuntu:~/Linux_C/2/2_4$ ls
gcc_hello_world gcc_hello_world.c
chenjiang@ubuntu:~/Linux_C/2/2_4$ ./gcc_hello_world
Hello World!
chenjiang@ubuntu:~/Linux_C/2/2_4$ gcc -D GCC -g gcc_hello_world.c -o gcc_hello_world
chenjiang@ubuntu:~/Linux_C/2/2_4$ ./gcc_hello_world
Hello GCC!
此外 -D在宏定义后可以赋值,默认为1,比如gcc -D GCC=2 -g gcc_hello_world.c -o gcc_hello_world
此时GCC的值为2
- -I -L的使用
gcc_hello_world.c
--------------------------------
#include <stdio.h>
#include "print.h"
int main(void)
{
print_hello();
return 0;
}
print.c
--------------------------------
#include <stdio.h>
#include "print.h"
void print_hello(void)
{
printf("Hello world!\n");
}
print.h
---------------------------------
#ifndef PRINT_H
#define PRINT_H
void print_hello(void);
#endif
如果.h文件即print.h和.c文件不在同一级目录,那么会出现以下错误:
此时需要用-I选项,来指定头文件的路径,命令如下:
-L与-I类似,只不过-L是指定库的位置。
3. 静态库和动态库的生成
3.1 静态库的生成及使用
同样利用上述-I演示的例子,需要经过以下步骤:
3.2 动态库的生成及使用
同样利用上述-I演示的例子,需要经过以下步骤: