C/C++知识点之LINUX下C语言编程调用其他函数、链接头文件以及库文件
小标 2018-11-01 来源 : 阅读 1350 评论 0

摘要:本文主要向大家介绍了C/C++知识点之LINUX下C语言编程调用其他函数、链接头文件以及库文件,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之LINUX下C语言编程调用其他函数、链接头文件以及库文件,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

LINUX下C语言编程经常需要链接其他函数,而其他函数一般都放在另外.c文件中,或者打包放在一个库文件里面,我需要在main函数中调用这些函数,主要有如下几种方法:

1.当需要调用函数的个数比较少时,可以直接在main函数中包含该文件,比如一个文件夹下包含add.c和main.c文件:
方法一:
     文件add.c定义两个整数相加的函数,code如下:

#include <stdio.h>
#include <math.h>
int
add(int a,int b)
{
   int z;
   z=a+b;
   return z;
}

    主函数main.c的code如下:

#include <stdio.h>
#include <math.h>
#include"add.c"
int
main()
{
    int i, j, k;
    i=1;
    j=2;
    k=add(i,j);
    printf("i add j=%d\n", k);
}

编译生成可执行文件:gcc -o main main.c
执行:  ./main
方法二:
可以通过写个头文件声明下函数add,然后在main函数中包含该文件,再写个makefile文件,将其链接好即可,实现如下:
新建fun.h, code如下:

#ifndef _FUN_H_
#define _FUN_H_
#endif
#include<stdio.h>
#include<math.h>

int 
add(int a,int b);

此时main函数应当包含这个头文件,main函数改为如下:

#include <stdio.h>
#include <math.h>
#include"fun.h"
int
main()
{
    int i, j, k;
    i=1;
    j=2;
    k=add(i,j);
    printf("i add j=%d\n", k);
}

 写个简单的makefile,编译

main:main.o add.o 
    gcc main.o add.o -o main
main.o:main.c fun.h add.c
    gcc -c main.c -o main.o
add.o:add.c fun.h
    gcc -c add.c -o add.o

make ,即可得到可执行文件main
./main ,就得到结果。
2.当定义的函数比较多时,这时可以将其打包放在一个库文件里面,然后在编译main函数时链接该库文件即可,库文件分为动态库和静态库,其链接方法如下:
比如:目录1:/home/文档/libraries_test/head    //里面有 add.c multi.c  (multi.c定义为两个整数相乘,这里没有列出)目录2:/home/文档/libraries_test/test_head   //里面有函数,需要包含目录一里的头文件  main.c
静态库链接:
cd 目录1
写个makefile文件,生成静态库。makefile内容如下:

add.o:add.c 
       gcc -c add.c -o add.o
   multi.o:multi.c 
       gcc -c multi.c -o multi.o
   libhead.a:add.o multi.o
       ar crv libhead.a add.o multi.o

 然后:make   生成了libhead.a文件
cd 目录2
写个makefile文件,生成可执行文件

main:main.c
      gcc main.c -I${目录1}$ -o main -L${目录1}$ -lhead

注意:-I..这个路径指的是头文件的路径(由于这里没有头文件,可以去掉-I{目录1})   -L...这个指的是库的路径,-l..这里指的是库名,如果需要引用-L..下的两个库(如libblas.a libcblas.a)这个时候就这样写:  -L... -lcblas -lblas  (注意:虽然用的是libcblas.a和libblas.a 但是在写路径时,只需写cblas和blas,即省略lib   .a)
   注意啦!!!!如将该.a文件放在/usr/lib或者/usr/local/lib下(gcc默认的库搜索路径下,由于/usr/lib下库文件比较多,我一般把常用的库放在/usr/local/lib下),此时就不需要指定路径了,这个时候编译:  gcc test1.c -o test -lcblas -lblas  (注意编译的时候一定要用 -l.. 指定是哪个库)
动态库链接:
cd 目录1  
写个makefile文件,生成动态库。makefile内容如下:

add.o:add.c head.h  gcc -c add.c -o add.omulti.o:multi.c head.c
   gcc -c multi.c -o multi.olibhead.so:add.o multi.o
   gcc -o libhead.so -fPIC add.o multi.o

然后:make      生成了libhead.so文件
cd 目录2    写个makefile文件,生成可执行文件    makefile文件生成如下:

main:main.c
    gcc main.c -I${目录1}$ -o main -Wl,-rpath,${目录1}$ -lhead

make即可生成可执行文件main,然后执行即可。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程