1. 程式人生 > >py faster rcnn的lib編譯出錯問題

py faster rcnn的lib編譯出錯問題

4.0 library 提示 run fast 不知道 9.1 規則 昨天

真是好事多磨啊,計算機系統依然是14.04,而cuda依然是8.0,唯一不同的是時間不一樣,下載的各種庫版本有差別,GPU的driver不一樣。

但是這樣就出問題了,py-faster rcnn的lib庫編譯時總是提示錯誤。

技術分享

網上搜了開始的相關帖子都提示說是gcc的版本問題,但是我後來問了一下在原來單位的同事,gcc的版本也沒問題,版本和原來用的一樣。後來我把cython卸載(0.26.1),從新安裝舊版本(0.19.1)依然同樣的錯誤,我沒有繼續追究版本問題。昨天看到github上的一個帖子說是把-R改成 -Wl,-rpath=就可以了。

開始不知道改那些地方,昨天看了一天的Cython,看到下午四點鐘頭都打了,可以下班就馬上滾了,不過也大概知道了編譯的過程。今天一來,再順著找,編譯過程中根據setup.py文件裏import的文件,有distutils.extension,也有Cython.Distutils下的。於是順著distutils找。開始在distutils下找到了extension.py文件,裏面定了了setup編譯時的規則,但是我仔細看了一下,是如果傳入的編譯命令是哪一個,應該怎麽定義。如果傳入的是-R,那麽應該怎麽鏈接,其中有runtime_library_dir,而這個的值是哪裏來的呢?於是再找,那就是找能對編譯規則有影響的。換個地方找,找distutils下的,追個找了一下,看到文件uixccomplier.py,覺得應該是這裏定義了對cython的setup編譯的規則。果然打開看到了有一個函數是runtime_library_dir的生成定位規則,終於找到這個地方了,把返回-R +dir的地方改成‘-Wl,-rpath=‘+dir。然後回到py-faster-rcnn的lib下,編譯通過,一切搞定。

歸咎原因應該是我安裝的anaconda2裏面的python的一些包升級了,規則改了。其實我在跑py-faster-rcnn時,有幾個地方提示說默認是float,而我用來做index,是不可以的。因此,python版本的影響吧。我決定把anaconda換到低版本試試,不過也挺奇怪,我半年前下載的anaconda2,是沒問題的,難道最近有更新很多嗎?

py faster rcnn的lib編譯出錯問題