OSError: libev.so.4: cannot open shared object file: No such file or directory

Ubuntu12.04 下使用pyev 模塊,但是運行sudo python setup.py install後卻提示出現以下錯誤:

Traceback (most recent call last):
  File "setup.py", line 59, in <module>
    check_version(libev_version(), min_libev_version, "libev")
  File "setup.py", line 50, in libev_version
    libev_dll = cdll.LoadLibrary(libev_dll_name)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 443, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: libev.so.4: cannot open shared object file: No such file or directory


很顯然是缺少共享庫文件,但是當我去/usr/local/lib下查找時,確發現有libev.so.4這個文件,那就是共享庫搜索路徑不對的問題,然後再去查看系統的共享庫搜索路徑配置,/etc/ld.so.conf, 發現裏面只有一句 include /etc/ld.so.conf.d/*.conf,然後再去查看/etc/ld.so.conf.d/下的文件,發現libc.conf中已經包括了/usr/local/lib這個路徑,那麼問題來了,通過include包括文件的方法本應可以把/usr/local/lib這條路徑包括近來的,看來是python的ctypes.cdll.LoadLibray()這裏出了問題。查看python官網上ctypes模塊部分,給出"On Linux, find_library() tries to run external programs(/sbin/ldconfig, gcc, and objdump) to find the library file. Itreturns the filename of the library file",這裏選使用ldconfig的默認搜索路徑,而ldconfig默認搜索路徑是/usr,/usr/lib,和/etc/ld.so.conf中列出的路徑,所以應該是把/usr/local/lib這條路徑直接添加到/etc/ld.so.conf的新行中,然後sudo ldconfig使之生效,這樣就確保了ctypes相關方法可以找到共享庫的正確的搜索路徑。然後再sudo python setup.py install就可以成功了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章