引用

Jesse Rei 的 linux 生成和使用动态链接库和静态链接库的Makefile编写

生成和使用动态链接库和静态链接库的Makefile编写

1. 概述

介绍linux下生成和使用动态链接库和静态链接库的Makefile的编写方法。

2. 生成动态链接库的Makefile

首先要有一个c或c++等工具编写出来的库函数文件,也就是里面写了一堆可以被别的函数调用的函数。比如:

aaa.cpp

#include <stdio.h>

void pf1(void)

{

printf(“********\n”);

return;

}

void pf2(void)

{

printf(“#########\n”);

return;

}

接着要写编译这个函数的Makefile

要把一个文件编译成动态链接库文件需要分两个步骤

第一步:将这个文件编译成.o文件

CPP=c++

CPPFLAGS=-c

$(CPP) $(CPPFLAGS) aaa.cpp -o aaa.o

这里是编译cpp文件,就用的是C++,如果是编译.c文件,就需要使用gcc

第二步:将这个.o文件链接成动态链接库文件

LD=ld

LIB = libaaa.so

$(LD) -shared -o $(LIB) haspapi.o

动态链接库文件的名字一定要以lib开头,后缀是.so

编译中一定要加上-shared,表示是生成动态链接库

3. 生成静态链接库

还是使用上面的文件,编写Makefile

同样也是分两步,第一步和上面一样,我直接拷贝过来

第一步:将这个文件编译成.o文件

CPP=c++

CPPFLAGS=-c

$(CPP) $(CPPFLAGS) aaa.cpp -o aaa.o

这里是编译cpp文件,就用的是C++,如果是编译.c文件,就需要使用gcc

第二步:将这个.o文件链接成静态链接库文件

LIB = libaaa.a

AR=ar

(AR) -r $(LIB) aaa.o

静态链接库文件的后缀是.a,同样也是需要以lib开头

4. 链接库的使用

首先需要编写一个使用了链接库文件中函数的c或者c++文件

bbb.cpp

extern void pf1(void);

extern void pf2(void);

int main(void)

{

pf1();

pf2();

return 0;

}

使用链接库,Makefile文件如下:

$(CPP) bbb.cpp -I. -L. -o bbb.o -laaa

这里不分是动态的还是静态的,但是,如果使用动态链接库,运行时需要将aaa.so文件拷贝到/usr/lib下,静态库则不需要。

上面的例子是在redhat9上运行测试过的。

PS:由于对C++了解甚少,所以直接用c写得c++文件

linux 生成和使用动态链接库和静态链接库的Makefile编写相关推荐

  1. C语言函数库:动态链接库与静态链接库

    首先,函数库就是一些事先写好的函数的集合,是别人分享的,我们可以拿来使用的.经过一些校准和整理,就形成一份标准化的函数库.例如glibc 函数库有两种提供形式:动态链接库与静态链接库 早起函数库里的函 ...

  2. Linux下Makefile中动态链接库和静态链接库的生成与调用

    背景:写这篇博客的原因是:最近在搞嵌入式,需要交叉编译opencv库文件,自己写Makefile,通过arm-linux-g++编译.链接.生成可执行文件,从而实现了移植的过程.平台是Toradex的 ...

  3. c++动态链接库及静态链接库的生成与使用

    c++动态链接库及静态链接库的生成与使用 1,新建控制台工程xdltest,改属性-配置属性-常规-配置类型为 动态库.dll或静态库.lib 2,打开工程后添加 dltest.h, dltest.c ...

  4. windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...

    动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a) 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀.例如:libhello.so libhello ...

  5. Windows下动态链接库和静态链接库的生成以及调用

    Windows下静态库和动态库的生成和调用 一.简介 二.生成静态链接库(.lib)和动态链接库(.dll) 三.静态链接库的调用 四.动态链接库的调用 动态链接库的两种调用方式 仅使用.dll文件 ...

  6. 关于动态链接库和静态链接库

    关于动态链接库和静态链接库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二 ...

  7. 动态链接库和静态链接库的相互包含问题及实现

    动态链接库和静态链接库的基本概念请参考 1.<深入理解计算机系统>第七章链接 2.<程序员的自我修养>第4章 静态链接和第7章 动态链接 3. http://blog.jobb ...

  8. 动态链接库和静态链接库的区别

    两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是LIB包含函数 ...

  9. 动态链接库与静态链接库的区别

    动态链接库与静态链接库的区别 库文件的概念 库文件是计算机上的一类文件,提供给使用者一些开箱即用的变量.函数或类.库文件分为静态库和动态库,静态库和动态库的区别体现在程序的链接阶段:静态库在程序的链接 ...

最新文章

  1. cmd装b专用代码_Python 用5行代码学机器学习—线性回归
  2. Java中对字符串的操作
  3. python技能(1)-map函数
  4. Dxperience 7.3.4 简体中文本地化
  5. java 判断两个时间段是不是有交集
  6. android excel布局,Androidui布局控件(2)表格布局excelPanel
  7. 如何在Mac/苹果电脑上接收iPhone短信
  8. 作为开发人员,U盘32G太小了,256G才够用
  9. Word转PDF方法(jacob插件)
  10. open 读Txt文件
  11. 程序员如何写工作日志?
  12. C语言 取绝对值函数abs()使用及注意事项
  13. [中科]寒武纪,不愁钱路无客户
  14. 静态资源文件无法加载导致jsp页面渲染不成功问题
  15. python3.6从入门到精通mobi_Python 3.6零基础入门与实战epub
  16. 嵌入式UWB定位测距设备开发实战(4)硬件之元器件选型
  17. php家居门户源码,家居装修门户模板源码discuz模板 php家居装修网论坛源码
  18. matplotlib subplot函数介绍
  19. 华为OD面试——机试算法
  20. 春招进行中,想进外企?500强资深程序员谈谈外企真实感受!

热门文章

  1. RabbitMQ学习之Routing(4)
  2. [嵌入式][分享][交流]发布一个消息地图的模块
  3. Exchange 2013学习(六),脱机通讯簿
  4. HttpServletRequest类用途
  5. Unix时代的开创者Ken Thompson
  6. EJB3.0 JPQL
  7. JAVA中浅复制与深复制
  8. php 0-1,PHP 动态解决0-1背包问题
  9. java注解字段类型相同_《java基础学习之——重复注解》
  10. 等差数列划分 II - 子序列(动态规划)