C语言编译器和打包静态库
2019-07-01 本文已影响0人
一叶知秋0830
1.如何通过编译器编译执行c程序
创建c程序文件
vi test.c
编写程序
#include<stdio.h>
int main(int argc, char* argv[])
{
printf("测试程序!\n");
return 0;
}
编译程序
编写好程序后保存退出,在终端输入下面命令来编译程序,其中test是生成的可执行程序的名字,可以自己取,执行后可以看见所在目录里面多了一个test文件
clang -g -o test test.c
执行程序
输入下面命令可以执行生成的可执行程序
./test
打包静态库和调用静态库
准备要打包的程序
准备add.h和add.c文件,在头文件add.h中声明2个数相加的函数,在add.c中实现该函数。(由于没有main函数,所以这个文件时不能运行的)
//add.h文件
int add(int a,int b);
// add.c文件
int add(int a,int b)
{
return a+b;
}
打包文件的编译
输入下面命令将要打包的文件进行编译,编译成功后会在所在目录多出一个add.o的文件
clang -g -c add.c
生成静态库
执行下面命令来生成静态库。执行完后所在目录会多出一个libqjlib.a静态库文件。
注意:libtool是Mac系统下打包静态库的工具;-static表示是静态库;qjlib是自己取的生成的静态库的名字,名字前面必须要加上lib;最后面是要打包的.o文件。
libtool -static -o libqjlib.a add.o
头文件的引用和函数调用
再次打开test.c文件,引入头文件add.h并在main函数中调用add函数(注意引入自己打包的库的头文件时用双引号而不是尖括号):
#include <stdio.h>
#include "add.h"
int main(int argc, char* argv[])
{
printf("测试程序!\n");
int sum = add(12,4);
printf("%d\n",sum);
return 0;
}
编译主程序
主程序保存退出后执行下面命令来编译主程序,
注意:这里编译和没有引入第三方库时的编译是不一样的,引入第三方库后需要设置库库文件的相关信息。-I(大写的i)后面是头文件路径,因为是在同一目录下,所以就是一个点;-L是库文件所在目录,目录和头文件一样;-l(小写的L)后面是库文件名字,-l和qjlib之间是没有空格的。
编译完后就可以执行./test
来执行了。
clang -g -o test test.c -I . -L . -lqjlib