工具文章

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
上一篇 下一篇

猜你喜欢

热点阅读