热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux静态动态链接库的编写和使用

生成和使用动态链接库和静态链接库的Makefile编写 1. 概述 介绍linux下生成和使用动态链接库和静态链接库的Makefile的编写方法。   2. 生成动态链接库的Makefile 首先

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

1. 概述

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

 

2. 生成动态链接库的Makefile

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

 

aaa.cpp

#include

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();

    return0;

}

 

 

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

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

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

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

 

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





推荐阅读
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • Linux 程序设计学习笔记----动手编写makefile文件
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • VS用c语言连接mysql,c语言连接mysql完整演示
    #include#includeintmain(){MYSQL*conn;创建一个指向mysql数据类型的指针connmysql_init(NULL);mysql的初始化if(!c ... [详细]
  • 1.      准备工作: 程序:MinGW-3.1.0-1.exe     windows下的gcc,编译c语言的工具下载地址: http:umn.dl.sourceforge. ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • 32位ubuntu编译android studio,32位Ubuntu编译Android 4.0.4问题
    问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的 ... [详细]
  • Word2vec,Fasttext,Glove,Elmo,Bert,Flairpre-trainWordEmbedding源码数据Github网址:词向量预训练实现Githubf ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Howtobuilda./configure&&make&&makeins ... [详细]
  • linux下编译安装lnmp
    2019独角兽企业重金招聘Python工程师标准#######################安装依赖#####################安装必要的包:y ... [详细]
  • 一、设置时区方法一:使用setup工具setup选择Timezoneconfiguration选择AsiaShanghai空格键勾选上System ... [详细]
  • golang源码分析调度概述
    golang源码分析-调度过程概述本文主要概述一下golang的调度器的大概工作的流程,众所周知golang是基于用户态的协程的调度来完成多任务的执行。在Linux ... [详细]
author-avatar
mobiledu2502861597
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有