当前位置: 首页 > 编程笔记 >

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

谭曦
2023-03-14
本文向大家介绍浅析python 动态库m.so.1.0错误问题,包括了浅析python 动态库m.so.1.0错误问题的使用技巧和注意事项,需要的朋友参考一下

$ 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继承问题的使用技巧和注意事项,需要的朋友参考一下 有如下的代码: 然后代码的运行结果如下: 关于的代码的运行过程,我有以下的疑问,我在 c1 的 __init__ 函数中会调用到p1.__init__(),然后会每次都是运行 c1.f1() 函数,没有运行 p1.f1() 的函数,在 p1 运行的 f1(),怎么也是 c1.f1

  • 本文向大家介绍深入浅析python的第三方库pandas,包括了深入浅析python的第三方库pandas的使用技巧和注意事项,需要的朋友参考一下 pandas模块 pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。 作为pandas系列的最终章,本文引出一个数据“复制”问题。 示例如下: 从上图中可以

  • 本文向大家介绍浅析Python多线程下的变量问题,包括了浅析Python多线程下的变量问题的使用技巧和注意事项,需要的朋友参考一下 在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁。 但是局部变量也有问题,就是在函数调用的时候,传递起来很麻烦: 每个函数一层一层调用都这么传参数那还得了?用

  • 本文向大家介绍java实现动态代理方法浅析,包括了java实现动态代理方法浅析的使用技巧和注意事项,需要的朋友参考一下 一些Java项目中在mybatis与spring整合中有MapperScannerConfigurer的使用,该类通过反向代理自动生成基于接口的动态代理类。 有鉴于此,本文浅析了java的动态代理。 本文使用动态代理模拟处理事务的拦截器。 接口: 实现类: java动态代理的实现

  • 本文向大家介绍浅析JavaScript动画,包括了浅析JavaScript动画的使用技巧和注意事项,需要的朋友参考一下 今天,小学生以自己浅薄的见地,在前辈大能的基础上写这篇文章,希望给大家打开一扇窥探JavaScript(以下简称JS)动画的窗户。 JS如何制造出动画效果?   结合浏览器提供的 setInterval 或 setTimeout API,高频改变DOM元素的一些属性,即可创造一个

  • 我有以下命令。我想循环使用此键和值,即对于冰/冷的项目,打印“值” 我试过这个: 却给我错误