1 背景說明
最近需要在Conda虛擬環(huán)境下運行ROS相關代碼,其中在運行代碼import moveit_commander
時,返回報錯ImportError: /lib/x86_64-linux-gnu/libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0
。由于在網上沒有找到和我一樣的問題,且在github上也沒找到解決方法,以為是個例就沒打算記錄,后來在與同學交流過程中發(fā)現,他們在conda虛擬環(huán)境中使用ROS時,均出現這種錯誤,故此記錄錯誤并提出一種解決方法,希望能夠對解決此類問題有所幫助。
2 報錯原因
可以看到,我的報錯來源是我在python中import moveit_commander
,但是可能其他命令也會報出該錯誤,但是報錯原因均來自libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0
,結合github上相關問題的討論,理解過來意思大概就是libffi的版本不一致,導致了libp11-kit.so.0在使用時出現了未定義符號問題。其實可以推到以后出現同類型問題,解決方法也應該基本類似。
3 解決方法
打開至conda虛擬環(huán)境下lib文件夾中,路徑為/home/anaconda3/envs/xxx/lib,在文件夾內啟動終端,輸入命令ls -l
,獲得結果如圖所是。
這里,由于我已經修改了鏈接,所以可能會有所不同。可以看到,你的libffi.so.7鏈接至libffi.so.8.1.0,所以,這也就是為什么會在程序中,libffi報版本錯誤了。找到原因,解決方法也很簡單,我這邊選擇的方式是將該路徑下的libffi.so.7文件備份后(重命名為libffi_bak.so.7),再在該路徑下創(chuàng)建一個新的libffi.so.7鏈接至/lib/x86_64-linux-gnu/libffi.so.7.1.0,即輸入命令:
sudo ln -s /lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7
sudo ldconfig
至此,再次運行程序,問題應該就解決了。文章來源:http://www.zghlxwxcb.cn/news/detail-778782.html
4 補充說明
上述過程解決問題后,師弟秉持打破沙鍋問到底的精神,一直在追究為什么會出現這種情況。。。后來,找到問題所在:原來是Python 3.8.16版本在安裝過程中,就會默認安裝libffi-3.4.2,在該庫中,就會出現舊版本兼容老版本問題,即出現libffi.so.7鏈接至libffi.so.8.1.0,進而產生報錯。而在python3.8.10中,默認安裝libffi-3.3版本,在該版本內,libffi.so.7鏈接至libffi.so.7.1.0,就不會產生上述問題。因此,另一種解決方式即為安裝python 3.8.10,同樣能解決該問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-778782.html
到了這里,關于Conda虛擬環(huán)境下libp11-kit.so.0: undefined symbol: ffi_type_pointer...問題解決的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!