linux 生成和使用动态链接库和静态链接库的Makefile编写
引用
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编写相关推荐
- C语言函数库:动态链接库与静态链接库
首先,函数库就是一些事先写好的函数的集合,是别人分享的,我们可以拿来使用的.经过一些校准和整理,就形成一份标准化的函数库.例如glibc 函数库有两种提供形式:动态链接库与静态链接库 早起函数库里的函 ...
- Linux下Makefile中动态链接库和静态链接库的生成与调用
背景:写这篇博客的原因是:最近在搞嵌入式,需要交叉编译opencv库文件,自己写Makefile,通过arm-linux-g++编译.链接.生成可执行文件,从而实现了移植的过程.平台是Toradex的 ...
- c++动态链接库及静态链接库的生成与使用
c++动态链接库及静态链接库的生成与使用 1,新建控制台工程xdltest,改属性-配置属性-常规-配置类型为 动态库.dll或静态库.lib 2,打开工程后添加 dltest.h, dltest.c ...
- windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...
动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a) 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀.例如:libhello.so libhello ...
- Windows下动态链接库和静态链接库的生成以及调用
Windows下静态库和动态库的生成和调用 一.简介 二.生成静态链接库(.lib)和动态链接库(.dll) 三.静态链接库的调用 四.动态链接库的调用 动态链接库的两种调用方式 仅使用.dll文件 ...
- 关于动态链接库和静态链接库
关于动态链接库和静态链接库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二 ...
- 动态链接库和静态链接库的相互包含问题及实现
动态链接库和静态链接库的基本概念请参考 1.<深入理解计算机系统>第七章链接 2.<程序员的自我修养>第4章 静态链接和第7章 动态链接 3. http://blog.jobb ...
- 动态链接库和静态链接库的区别
两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是LIB包含函数 ...
- 动态链接库与静态链接库的区别
动态链接库与静态链接库的区别 库文件的概念 库文件是计算机上的一类文件,提供给使用者一些开箱即用的变量.函数或类.库文件分为静态库和动态库,静态库和动态库的区别体现在程序的链接阶段:静态库在程序的链接 ...
最新文章
- cmd装b专用代码_Python 用5行代码学机器学习—线性回归
- Java中对字符串的操作
- python技能(1)-map函数
- Dxperience 7.3.4 简体中文本地化
- java 判断两个时间段是不是有交集
- android excel布局,Androidui布局控件(2)表格布局excelPanel
- 如何在Mac/苹果电脑上接收iPhone短信
- 作为开发人员,U盘32G太小了,256G才够用
- Word转PDF方法(jacob插件)
- open 读Txt文件
- 程序员如何写工作日志?
- C语言 取绝对值函数abs()使用及注意事项
- [中科]寒武纪,不愁钱路无客户
- 静态资源文件无法加载导致jsp页面渲染不成功问题
- python3.6从入门到精通mobi_Python 3.6零基础入门与实战epub
- 嵌入式UWB定位测距设备开发实战(4)硬件之元器件选型
- php家居门户源码,家居装修门户模板源码discuz模板 php家居装修网论坛源码
- matplotlib subplot函数介绍
- 华为OD面试——机试算法
- 春招进行中,想进外企?500强资深程序员谈谈外企真实感受!