1、GCC 简介
/* filename: main.c */ #include "mytool1.h" #include "mytool2.h" int main(int argc,char **argv) { myprint1("hello"); myprint2("world"); }对于上述的例子,编译的命令为gcc main.c -o test1 ,这样可生产可执行文件。实质上,上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。
对于多个文件的编译,假设有一个由test1.c和 test2.c两个源文件组成的程序,为了对它们进行编译,并最终生成可执行程序test,可以使用下面的命令:
gcc -c test1.c gcc -c test2.c gcc -o test test1.o test2.o
2、库文件连接
其中inclulde文件夹的路径是/usr/dev/mysql/include,lib文件夹是/usr/dev/mysql/lib,首先我们要进行编译test.c为目标文件,这个时候需要执行
gcc –c –I /usr/dev/mysql/include test.c –o test.o
gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test
假设我们有下面这样的一个程序,源代码如下:
/* filename: main.c */ #include "mytool1.h" #include "mytool2.h" int main(int argc,char **argv) { myprint1("hello"); myprint2("world"); } /* filename: mytool1.c */ #include "mytool1.h" void myprint1(char *print_str) { printf("This is mytool1 print %s/n",print_str); } /* filename: mytool2.h */ #ifndef _MYTOOL_2_H #define _MYTOOL_2_H void myprint2(char *print_str); #endif /* filename: mytool2.c */ #include "mytool2.h" void myprint2(char *print_str) { printf("This is mytool2 print %s/n",print_str); }
gcc -c main.c gcc -c mytool1.c gcc -c mytool2.c gcc -o main main.o mytool1.o mytool2.o
main: main.o mytool1.o mytool2.o gcc -o main main.o mytool1.o mytool2.o main.o: main.c gcc -c main.c mytool1.o: mytool1.c gcc -c mytool1.c mytool2.o: mytool2.c gcc -c mytool2.c
CC=g++ OBJS=DBUtil.o MQBDSolution.o Lock.o LIB=-L/opt/db/oracle/product/11.2.0/dbhome_1/lib -L/opt/db/oracle/product/11.2.0/dbhome_1/rdbms/lib/ # -L代表链接的库文件 INCLUDE=-I/opt/db/oracle/product/11.2.0/dbhome_1/precomp/public -I/opt/db/oracle/product/11.2.0/dbhome_1/rdbms/public # -I 代表链接的第三方头文件 MQBDSolution: $(OBJS) $(CC) -o MQBDSolution $(OBJS) $(LIB) -pthread -locci -lclntsh DBUtil.o: dao/DBUtil.cpp $(CC) -c dao/DBUtil.cpp $(INCLUDE) Lock.o: util/Lock.cpp $(CC) -c util/Lock.cpp $(INCLUDE) MQBDSolution.o:MQBDSolution.cpp $(CC) -c MQBDSolution.cpp $(INCLUDE) -Wall -O -g clean: rm -rf *.o & rm MQBDSolution