您的位置:首页 > 运维架构 > Linux

【ARM&Linux】Linux下静态&动态函数库设计

2018-02-02 20:36 453 查看

《Linux下静态&动态函数库设计》

环境:

ubuntu14.04 LTS

windows10 1709

(一)静态链接库

【说明】

1. 在Linux中,以【.so】结尾的文件,是动态链接库;以【.a】 结尾的文件,为静态链接库。

2. Linux下进行链接时 默认是链接动态库,如果需要使用静态库,需要使用编译选项:-static,例如:

gcc -static main.c -o main

3. 本例程只是一个demo,讲述制作库的方法。

【涉及相关文件】

//filename:main.c

#include <stdio.h>
#include "./myadd.h"

int main()
{
int a, b;

printf("Please enter 2 number : ");
scanf("%d %d", &a, &b);
printf("\n\n");
printf("a + b = %d \n\n", myadd(a, b));
return 0;
}


// filename : myadd.c
// Creat by KunGe 2018/2/2
//

#include "myadd.h"

int myadd(int a, int b)
{
return a + b;
}


//filename : myadd.h

#ifndef _MY_ADD_H
#define _MY_ADD_H

int myadd(int a, int b);

#endif


【制作使用静态库】

制作静态库

gcc –c myadd.c –o myadd.o 【-c 选项是只编译,不链接】



ar cqs myadd.a myadd.o



将制作好的myadd.a 复制到/usr/lib目录下

使用静态库

GCC在链接时,默认只会链接C函数库,而对于其他的函数库,则需要使用-l选项来显示地指明需要链接。例:

gcc test.c –lmyadd -o test

【-l选项表示 -lib,myadd代表你自己生成的库的名字】



(二)动态链接库

gcc –c myadd.c –o myadd.o

gcc -shared -fPIC myadd.o -o libmyadd.so

将制作好的libmylib.so 复制到/usr/lib

【-fpic】使输出的对象模块是按照可重定位地址方式生成的。

【-shared】 指明产生动态链接库

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: