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用法相关推荐

  1. linux怎么调用静态库,Linux 静态库的创建和使用

    简介 在linux下库分两种:静态库和共享(动态)库.这两种库的主要不同在于连接到程序的过程. 在编译程序时,连接器(ld)负责把程序中不同的模块连接起来,产生最终的可执行文件.静态库就是在这一过程连 ...

  2. linux c 调用 so 库

    /***********编译时要链接 -l dl 库************/ #include<stdlib.h> #include<stdio.h> #include< ...

  3. 两台电脑串口传输文件及调用opencv库编程显示图片和文本

    文章目录 一.两台电脑利用串口进行文件传输 (一).实验内容 (二).配置环境 (三).实验过程 (四).结果分析 二.在Ubuntu下基于Linux环境调用opencv库编程显示图片和文本 (一). ...

  4. Linux基础之Libcurl库之HTTPS协议实现人脸识别

    目录 一.前言 二.编译openssl支持libcurl的https访问 三.base64编码 四.封装base64编码函数并人脸识别成功 五.车牌识别 六.总结 一.前言 上一篇文章我们调用libc ...

  5. linux添加自己的库,Linux学习笔记——例叙makefile 增加自定义共享库

    Linux学习笔记--例说makefile 增加自定义共享库 0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己 ...

  6. 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。

    在Linux下如何使用GCC编译程序.简单生成 静态库及动态库.   本文适用于Linux下开发初学者.本文初步讲解在Linux下如何使用GCC编译程序.简单生成静态库及动态库. 一.关于安装.一般系 ...

  7. linux用c++调用动态库

    1.3 用c++静态方式调用动态库libsthc.so: /*cpptest.cc*/    //linux下的c++后缀有cc,cxx, cpp #include "libsthc.h&q ...

  8. linux C语言多线程库pthread中条件变量的正确用法逐步详解

    linux C语言多线程库pthread中条件变量的正确用法: 了解pthread常用多线程API和pthread互斥锁,但是对条件变量完全不知道或者不完全了解的人群. 关于条件变量的典型应用,可以参 ...

  9. CMake从0到1:Linux编译动态库,调用动态库,VSCode单步执行

    工欲善其事必先利其器,如果要想在Linux系统上编写C++代码,常常我们会有如下几个需求: 1.编译可执行文件 2.可执行文件调用动态库,这里通常包括两种情况:(1)自己的动态库,那就得先生成再链接: ...

最新文章

  1. 一阶逻辑与二阶逻辑的区别一元谓词多元谓词
  2. Azure自动化部署运维浅谈
  3. [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)...
  4. ios 的touch事件分析
  5. 易语言写c盘配置文件,易语言写配置文件的方法
  6. 异常处理机制——panic 和 recover
  7. 方形物体绕中心旋转的扭力_三维旋转
  8. C++中vector作为参数的三种传参方式
  9. 用VC创建程序启动画面
  10. 【机器学习】ICA 原理以及相关概率论,信息论知识简介
  11. 高通about.html 文件,关于高通校准调用文件的说明文档
  12. iOS--HealthKit简单使用
  13. linux关键vi按什么键n,linux vi 使用方法
  14. inflect java_驼峰、下划线、单复数、表名-类名转换...通通交给字符串处理库:i...
  15. 【Tushare 大数据社区——解救你的财经数据需求】
  16. 汽车常用连接器接口定义
  17. 【Vue全家桶+SSR+Koa2全栈开发】项目搭建过程 整合 学习目录(持续更新中)
  18. 考研英语 - word-list-3
  19. 怎样度过研究生生活,如何度过研究生生活
  20. Rancher Labs获2000万美元B轮融资, CEO 梁胜出任有容云联席CTO

热门文章

  1. Android人脸检测类FaceDetector
  2. Ruby的Fiber根本不是用来做并发的~
  3. myeclipse中svn图标状态(同步标记)不显示问题的解决方法
  4. [转载]遗留系统中的RUBY中文解决方案
  5. 开源Blender 是3D 图形设计
  6. Java计算的XML面试题
  7. php curl 和 socket,PHP HTTP操作类 , 支持 Curl 和 Socket
  8. halcon学习之图像分割
  9. NLP --- 文本分类(基于概率的隐语意分析(PLSA)详解)
  10. 网关 跨域_好文推荐:微服务网关实战—Spring Cloud Gateway