Linux简单调用so库及Makefile用法
1.test.h
#include <stdio.h>
//函数指针
typedef int (*ADD)(int,int);2.test.c
#include <stdio.h>
int add(int a, int b){printf(".PHONY 测试!\n");return (a + b);
}3.测试程序main.c
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include "test.h"int main(){void *handle=dlopen("./libtest.so",RTLD_LAZY); ADD add=NULL;*(void **)(&add)=dlsym(handle,"add"); int result=add(2,5);printf("a + b = %d\n",result);return 0;
}4.Makefile
#$@--目标文件(main), $^--所有的依赖文件(main.c), $<--第一个依赖文件.
CC := gcc
.PHONY:all clean
# test
SOURCE := $(wildcard *.c) #把*.c赋值给SOURCE
OBJS := $(patsubst %.c,%.o,$(SOURCE)) #把*.c替换成*.oall: libtest.so main
libtest.so: test.o@echo $@ $^ "11111"$(CC) -shared -o $@ $^ #编译-shared生成so共享库test.o: test.c@echo $@ $^ "2222"$(CC) -c -fPIC -o $@ $^ #-c只编译不链接; PIC: Position Independent Code main: main.c@echo $@ $^ "3333"$(CC) -o $@ $^ -ldl #不需指定libtest.so进行编译,执行会在指定目录加载so./main#ldd main
clean:rm *.so *.o main
Linux简单调用so库及Makefile用法相关推荐
- linux怎么调用静态库,Linux 静态库的创建和使用
简介 在linux下库分两种:静态库和共享(动态)库.这两种库的主要不同在于连接到程序的过程. 在编译程序时,连接器(ld)负责把程序中不同的模块连接起来,产生最终的可执行文件.静态库就是在这一过程连 ...
- linux c 调用 so 库
/***********编译时要链接 -l dl 库************/ #include<stdlib.h> #include<stdio.h> #include< ...
- 两台电脑串口传输文件及调用opencv库编程显示图片和文本
文章目录 一.两台电脑利用串口进行文件传输 (一).实验内容 (二).配置环境 (三).实验过程 (四).结果分析 二.在Ubuntu下基于Linux环境调用opencv库编程显示图片和文本 (一). ...
- Linux基础之Libcurl库之HTTPS协议实现人脸识别
目录 一.前言 二.编译openssl支持libcurl的https访问 三.base64编码 四.封装base64编码函数并人脸识别成功 五.车牌识别 六.总结 一.前言 上一篇文章我们调用libc ...
- linux添加自己的库,Linux学习笔记——例叙makefile 增加自定义共享库
Linux学习笔记--例说makefile 增加自定义共享库 0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己 ...
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。
在Linux下如何使用GCC编译程序.简单生成 静态库及动态库. 本文适用于Linux下开发初学者.本文初步讲解在Linux下如何使用GCC编译程序.简单生成静态库及动态库. 一.关于安装.一般系 ...
- linux用c++调用动态库
1.3 用c++静态方式调用动态库libsthc.so: /*cpptest.cc*/ //linux下的c++后缀有cc,cxx, cpp #include "libsthc.h&q ...
- linux C语言多线程库pthread中条件变量的正确用法逐步详解
linux C语言多线程库pthread中条件变量的正确用法: 了解pthread常用多线程API和pthread互斥锁,但是对条件变量完全不知道或者不完全了解的人群. 关于条件变量的典型应用,可以参 ...
- CMake从0到1:Linux编译动态库,调用动态库,VSCode单步执行
工欲善其事必先利其器,如果要想在Linux系统上编写C++代码,常常我们会有如下几个需求: 1.编译可执行文件 2.可执行文件调用动态库,这里通常包括两种情况:(1)自己的动态库,那就得先生成再链接: ...
最新文章
- 15-数据结构探险系列-图篇
- 【 MATLAB 】eps (浮点相对精度)简介
- Linux中link,unlink,close,fclose详解
- jdbc链接oracle报错ORA-12505解决办法
- shell编程之简单四则运算及数组定义
- 04.full_text match查询
- 在S/4HANA扩展字段的Available Fields列表里,看不到自己创建的扩展字段该怎么办
- Note cancel request的实现原理
- Exynos4412裸机开发——中断处理
- 同事说rar压缩有风险,让我用zip压缩文件
- docker部署mysql项目_docker部署springboot项目(web + mysql)
- 2015年创业中遇到的技术问题:141-150
- 使用dva脚手架(dva-cli)快速构建React项目
- onestage方法_FCOS : 找到诀窍了,anchor-free的one-stage目标检测算法也可以很准 | ICCV 2019...
- python3+telnetlib实现简单自动测试
- 上传了一个安卓系统摄像头性能测试代码
- php iis 重启服务,重新启动IIS即可生效
- 个人网站添加百度统计
- R语言caret包preProcess()标准化出现错误: Matrices or data frames are required for preprocessing
- 基于HTML、CSS、JavaScript、jQuery的app小项目--简易备忘录
热门文章
- 世界政府峰会发布了《在区块链上构建超互联未来》文件
- css补充、JavaScript、Dom
- oracle数据库的重复数据处理
- 转载一下如何联系口语
- 我平时比较喜欢的几篇技术文章
- BPMN 2.0 流程设计
- 宕昌一中2021高考成绩查询,2020届毕业生:宕昌一中“拍了拍”你 | 青春不散场 扬帆再起航...
- php网页登录制作,thinkphp5 系统登录的实现
- java 文件名乱码_详解关于java文件下载文件名乱码问题解决方案
- opencv图片旋转90°/-90°/180°(网上很多转换,长宽出问题,这里可以长宽对其)