浅析python 动态库m.so.1.0错误问题
$python-V
python:errorwhileloadingsharedlibraries:libpython3.6m.so.1.0:cannotopensharedobjectfile:Nosuchfileordirectory
ldd是列出动态库依赖关系:
$ldd/usr/local/bin/python3.6 linux-vdso.so.1=>(0x00007fffecbba000) libpython3.6m.so.1.0=>notfound 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-shareddll.c-odll.so
C文件:dll.c 如下
#includestructparam{ inta; intb; charc; floatf; intarr[3]; }; voidprint0(structparamarg) { printf("inprint:\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]); } voidprint2(structparam*arg) { printf("inprint2:\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]); } voidprint3(inta) { printf("inprint3:\n"); printf("a:%d\n",a); }
python定义传给动态库的结构体
fromctypesimport* classss(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错误问题的文章就介绍到这了,更多相关pythonm.so.1.0内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。