浅析python 动态库m.so.1.0错误问题


Posted in Python onMay 09, 2020

$ python -V
python: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory

ldd是列出动态库依赖关系:

$ ldd /usr/local/bin/python3.6

linux-vdso.so.1 => (0x00007fffecbba000)
libpython3.6m.so.1.0 => not found
libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007fe1400ff000)
libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007fe13fefb000)
libutil.so.1 => /usr/lib64/libutil.so.1 (0x00007fe13fcf8000)
libm.so.6 => /usr/lib64/libm.so.6 (0x00007fe13f9f6000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007fe13f628000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe14031b000)

查找动态库:

$ find / -name 'libpython3.6m.so.1.0'

/root/Python-3.6.9/libpython3.6m.so.1.0
/usr/local/lib/libpython3.6m.so.1.0

(2)将libpython3.6m.so.1.0文件路径的目录添加到/etc/ld.so.conf :

$ vim /etc/ld.so.conf 
文件末尾新添加一行,/usr/local/lib/

(3)保存,使得修改生效:

$ ldconfig

ps:下面看下python中使用动态库的方法

首先,创建一个简单的动态库

编程生成dll.so:   gcc -fPIC -O2 -shared dll.c -o dll.so
C文件:dll.c  如下

#include <stdio.h>

struct param {
  int a;
  int b;
  char c;
  float f;
  int arr[3];
  };
  
void print0(struct param arg)
{
  printf("in print:\n");
  printf("a: %d\n", arg.a);
  printf("b: %d\n", arg.b);
  printf("c: %c\n", arg.c);
  printf("f: %f\n", arg.f);
  printf("arr: %d %d %d\n", arg.arr[0], arg.arr[1], arg.arr[2]);
}

void print2(struct param *arg)
{
  printf("in print2 :\n");
  printf("a: %d\n", arg->a);
  printf("b: %d\n", arg->b);
  printf("c: %c\n", arg->c);
  printf("f: %f\n", arg->f);
  printf("arr: %d %d %d\n", arg->arr[0], arg->arr[1], arg->arr[2]);
}

void print3(int a)
{
  printf("in print3:\n");
  printf("a: %d\n", a);
}

python定义传给动态库的结构体

from ctypes import *

class ss(Structure):
  _fields_ = [
  ("a", c_int),
  ("b", c_int),
  ("c", c_char),
  ("f", c_float),
  ("arr", c_int*3), //定义数组
  ]

python 使用dll.so实例

#加载动态库
fileName = "/home/primax/Desktop/Work/Test/python/dll.so"
lib = cdll.LoadLibrary(fileName)
#定义变量
param = ss()
#给结构体赋值
param.a = 1
param.b = 2
param.c = 'a'
param.f = 1.2345
param.arr[0] = 0
param.arr[1] = 1
param.arr[2] = 2

lib.print0(param)
lib.print3(2)
#传指针 pointer取指针
lib.print2(pointer(param))

总结

到此这篇关于浅析python 动态库m.so.1.0错误问题的文章就介绍到这了,更多相关python m.so.1.0内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
Python3搜索及替换文件中文本的方法
May 22 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
利用Python获取操作系统信息实例
Sep 02 Python
深入了解Django View(视图系统)
Jul 23 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
Jan 14 Python
Python编程快速上手——Excel表格创建乘法表案例分析
Feb 28 Python
IDLE下Python文件编辑和运行操作
Apr 25 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 Python
python用Tkinter做自己的中文代码编辑器
Sep 07 Python
Python Selenium库的基本使用教程
Jan 04 Python
Python中的 No Module named ***问题及解决
Jul 23 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
May 09 #Python
Python发送邮件封装实现过程详解
May 09 #Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 #Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 09 #Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 #Python
Python接口测试数据库封装实现原理
May 09 #Python
解决pycharm安装第三方库失败的问题
May 09 #Python
You might like
php MYSQL 数据备份类
2009/06/19 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
freemarker判断对象是否为空的方法
2015/08/13 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
2016/09/05 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
微信跳一跳python代码实现
2018/01/05 Python
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
python 实现批量图片识别并翻译
2020/11/02 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
高中生毕业自我鉴定
2013/10/10 职场文书
劳资员岗位职责
2013/11/11 职场文书
安全员岗位职责
2013/11/11 职场文书
八项规定整改措施
2014/02/12 职场文书
烹饪自我鉴定
2014/03/01 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
大学生党课心得体会
2016/01/07 职场文书
MySQL创建表操作命令分享
2022/03/25 MySQL