xirurensheng_123
2018-04-07 10:37
采纳率: 56.3%
浏览 4.4k

python中使用os.system调用本地程序

在python脚本中执行本地编写的程序时,老是提示动态库查找不到
例子如下:
os.system('/home/test/a.out')//注该程序需要动态链接/home/test/add/add.so动态库
想问下这个怎么去调用,或者是在system中怎么提价add.so动态库的路径

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 开水 2018-04-08 07:53
    已采纳

    这么来搞就行了:

    os.system("LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/test/add/ /home/test/a.out")
    

    就是在命令的同一行,前面加上:

    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:SO文件所在的目录
    
    点赞 打赏 评论
  • devmiao 2018-04-07 16:12
    点赞 打赏 评论
  • devmiao 2018-04-07 16:12
    点赞 打赏 评论
  • devmiao 2018-04-07 16:12
    点赞 打赏 评论
  • kingforyang 2018-04-08 02:52

    原因很简单 /home/test/add/add.so的目录不是默认的动态库搜索路径,所以找不到。把so拷贝到/lib,/usr/lib/等位置就可以了。

    编译成功后运行./a.out, 仍然出错
    说找不到库

    有两种方法:

    一、能够把当前路径增加 /etc/ld.so.conf中然后执行ldconfig。或者以当前路径为參数执行ldconfig(要有root权限才行)。

    二、把当前路径增加环境变量LD_LIBRARY_PATH中

    当然。假设你认为不会引起混乱的话,能够直接把该库拷入/lib,/usr/lib/等位置(无可避免,这样做也要有权限),这样链接器和载入器就都能够准确的找到该库了。

    我们採用另外一种方法:
    export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
    这样,再运行就成功了。

    注:

    LD_LIBRARY_PATH:该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其它路径。当运行函数动态链接.so时,假设此文件不在缺省文件夹下‘/lib’ and ‘/usr/lib’.那么就须要指定环境变量LD_LIBRARY_PATH。
    假如如今须要在已有的环境变量上加入新的路径名,则採用例如以下方式:

    LD_LIBRARY_PATH=NEWDIRS:$LD_LIBRARY_PATH.(NEWDIRS是新的路径串)

    点赞 打赏 评论

相关推荐 更多相似问题