Linux环境下动态库的生成与使用
一、动态库的生成
定义 a.h、a.c 如下:
a.h
#include <stdio.h>
#include <stdlib.h>
void FuncA();
a.c
#include "a.h"
void FuncA()
{
printf("我是 a\n");
}
- 调用
gcc -c -fpic a.c指令在同级目录下生成 a.o 文件; - 调用
gcc -shared a.o -o liba.so指令在同级目录下生成了 liba.so 动态库。
在 Linux 中动态库以 lib 作为前缀,以 .so 作为后缀,中间是库的名字,自己指定即可,即 libxxx.so。
二、动态库的使用
假设有个文件 b.c,在该文件中通过引用 a.h 实现对 FuncA() 的调用:
b.c
#include "a.h"
int main()
{
FuncA();
return ;
}
- 调用
export LD_LIBRARY_PATH="liba.so的绝对路径"修改环境变量; - 调用
source ~/.profile或source ~/.bashrc使修改环境变量的指令生效; - 调用
gcc b.c -o b -L [liba.so的路径] -l a链接动态库 liba.so- -L:在程序编译的时候,指定使用的库的路径
- -l:在程序编译的时候,指定使用的库。(库的名字一定要掐头去尾。如:liba.so变为 a)
- 调用
./b运行程序,此时你会发现,程序成功运行并调用 FuncA()。
三、声明
参考资料:
- [Linux 环境下的动态库生成与使用](Linux 环境下的动态库生成与使用_峰上踏雪的博客-CSDN博客_linux动态库)
Linux环境下动态库的生成与使用的更多相关文章
- Linux环境编译动态库和静态库总结
对Linux环境动态库和静态库的一些基础知识做一些总结, 首先总结静态库的编译步骤. 1 先基于.cpp或者.c文件生成对应的.o文件 2将几个.o文件 使用ar -cr命令 生成libname.a文 ...
- Linux环境下stl库使用(vector)
step1: #include <iostream> #include <vector> #include <string> using namespace std ...
- Linux环境下stl库使用(map)
例子1: testMap.cpp #include <string.h> #include <iostream> #include <map> #include & ...
- Linux下动态库查找路径的问题
说到和动态库查找路径相关的问题,总体上可以分为两类: 第一类: 通过源代码编译程序时出现的找不到某个依赖包的问题,而如果此时你恰好已经按照它的要求确确实实.千真万确.天地良心地把依赖库给装好了, ...
- 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH
谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...
- 谈谈Linux下动态库查找路径的问题
学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续"上路".回想起自己当年刚接触Linux时,不管是用源码包编译程序,还是程序运行时出现的和动态库的各种恩恩怨怨,心里 ...
- [转]谈谈Linux下动态库查找路径的问题
http://blog.chinaunix.net/uid-23069658-id-4028681.html 学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续“上路”.回想起自己当年刚 ...
- 转:谈谈Linux下动态库查找路径的问题
http://blog.chinaunix.net/uid-23069658-id-4028681.html 学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续“上路”.回想起自己当年刚 ...
- Linux下动态库生成和使用
Linux下动态库生成和使用 一.动态库的基本概念 1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中 ...
- Linux下动态库和静态库的生成和使用
1.准备头文件和源文件 hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name): #endif hello.c #in ...
随机推荐
- vue 进阶学习(二):node.js、npm、webpack、vue-cli
node.js.npm.webpack.vue-cli 前言:主要对插件的描述,安装,卸载.使用以及注意点 1 node.js 说明:是一个基于 Chrome V8 引擎的 JavaScript 运行 ...
- 4.3 Windows驱动开发:监控进程与线程对象操作
在内核中,可以使用ObRegisterCallbacks这个内核回调函数来实现监控进程和线程对象操作.通过注册一个OB_CALLBACK_REGISTRATION回调结构体,可以指定所需的回调函数和回 ...
- 基于.NET实现Matlab备用方案
基于.NET实现Matlab备用方案 今日圈内的朋友都在刷这样的消息: 正值哈工大百年校庆之际,哈工大.哈工程的师生收到了MATLAB软件停止服务的邮件,在与 MATLAB 开发公司 MathWork ...
- 深入浅出Java多线程(七):重排序与Happens-Before
引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第七篇内容:重排序与Happens-Before.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在上一篇文章 ...
- IDEA中使用ChatGPT
IDEA中使用ChatGPT 在IDEA中安装ChatGPT插件,可以帮助写基础逻辑代码,提高工作效率和学习效率,有兴趣可以玩一下. 插件名为 Bito. 1. 什么是Bito Bito是一款在Int ...
- 实现阿里云模型服务灵积 DashScope 的 Semantic Kernel Connector
Semantic Kernel 内置的 IChatCompletionService 实现只支持 OpenAI 与 Azure OpenAI,而我却打算结合 DashScope(阿里云模型服务灵积) ...
- ASP.NET Core 配置 - 创建自定义配置提供程序
ASP.NET Core 配置 - 创建自定义配置提供程序 在本文中,我们将创建一个自定义配置提供程序,从数据库读取我们的配置.我们已经了解了默认配置提供程序的工作方式,现在我们将实现我们自己的自定义 ...
- NC17872 CSL的校园卡
题目链接 题目 题目描述 今天是阳光明媚,晴空万里的一天,CSL早早就高兴地起床走出寝室到校园里转悠. 但是,等到他回来的时候,发现他的校园卡不见了,于是他需要走遍校园寻找它的校园卡.CSL想要尽快地 ...
- CSS浮动&定位&布局
浮动简介 浮动最早起设计出来是为了实现文字环绕图片或者文字环绕的效果,现在浮动是主流的页面布局方式之一 float:浮动属性,值可以是left.right对应向左和向右浮动 元素浮动之后的特点 脱离文 ...
- STC8A/STC8H通用的最小系统板
STC8(包括之前的STC15)因为自带晶振, 所以最小电路需要的外围元件几乎为0 -- 手册上画的两个电容不加也没问题, 直接加上5V电源就能跑. 这样只需要用排针把管脚都引出就行了. 唯一不方便的 ...