錯(cuò)誤 relocation *****
添加test.cpp ( int main(void) { return 0; } ) 文件戒悠,可以放到./matlab/src/下购披,同時(shí)在vl_compilenn中添加這個(gè)src潜沦,這樣就可以自動(dòng)編譯錯(cuò)誤fpic
在cpu版本時(shí)艾凯,因?yàn)槿鄙?fPIC會(huì)有問(wèn)題副编,所以在ccoptim中添加扣典,同時(shí)gpu版本中保留也沒(méi)問(wèn)題妆毕;fPIC是產(chǎn)生位置無(wú)關(guān)的代碼,即動(dòng)態(tài)鏈接庫(kù)必須添加錯(cuò)誤
如果缺少-c以及-cxx則會(huì)出現(xiàn) only ET_DYN and ET_EXEC can be loaded.錯(cuò)誤
在mex-link 缺少了-shared 命令贮尖,雖然編譯通過(guò)笛粘,但是在test時(shí)候會(huì)cannot dynamically load executable錯(cuò)誤
在編譯gpu版本,有些so不知道怎么提前給出,但是通過(guò)bashrc種的preload可以做到薪前,這些有:
export LD_PRELOAD=/usr/lib/x86_64-linux-gpu/libstdc++.so.6:/usr/local/cuda-7.5/lib64/libcudart.so:/usr/local/cuda-7.5/lib64/libcublas.so:/usr/lib/x86_64-linux-gpu/libprotobuf.sowarning
gcc version的問(wèn)題不是根本問(wèn)題润努,其實(shí)沒(méi)必要更換,就算是更換示括,其實(shí)也沒(méi)必要直接刪除舊版本铺浇,其實(shí)可以用alternative gcc/g++的方式實(shí)現(xiàn),不過(guò)總之得root身份垛膝,沒(méi)有的話就算了鳍侣;
另外,cuda-version繁涂,cudnn-version拱她,matlab-version也不是錯(cuò)誤的原因,只要是基本能匹配就可以扔罪,沒(méi)比亞完全一致秉沼,不過(guò)warning是一定的vl_compilenn
該函數(shù)主要分為3部分,第一部分是構(gòu)建參數(shù)矿酵,第二部分是compile唬复,第三部分是mex-link,讀者可以自己去對(duì)應(yīng)全肮。每次出錯(cuò)后再重新執(zhí)行該文件敞咧,都需要把compile和link都重新做,是沒(méi)有太大必要的辜腺。如果只是link error休建,那么可以把compile部分給block掉,用if 0 XXX end 方式就可以评疗。不過(guò)如果compile部分有修改测砂,則需要重新compile。
無(wú)論是cpu還是gpu百匆,都是如此砌些。另外,gpu相對(duì)cpu加匈,主要改的就是compile存璃,在mex-link上還是一樣的,可能在linkpass參數(shù)上有區(qū)別雕拼。mexlink錯(cuò)誤
mex-link錯(cuò)誤的原因多是找不到纵东,如果手寫link的話,一般是-la或者-L/path/to/link -la這般悲没。既然路徑找不到篮迎,不妨直接把vl_compilenn中mexlink的路徑直接寫清楚男图,按照剛提到的這般去寫即可。
相比cpu版本甜橱,gpu版本啟動(dòng)慢逊笆,運(yùn)行快;如果上面的錯(cuò)誤都修改好了岂傲,那就應(yīng)該沒(méi)問(wèn)題了难裆。
PS:成功編譯matconvnet花了兩天的時(shí)間研究,中間屢次想要放棄镊掖,但是這個(gè)自己最熟悉matlab了乃戈,想要轉(zhuǎn)python也不是那么輕松。而且別人的工作是基于這個(gè)平臺(tái)亩进,想要轉(zhuǎn)的話症虑,需要把代碼轉(zhuǎn)換過(guò)去也不是那么簡(jiǎn)單的事情。終于把骨頭啃下來(lái)了9檠Α5尽!太爽了V骷O捌丁!像這種沒(méi)有網(wǎng)絡(luò)教程的安裝工作千元,還是第一次完成苫昌,果然很難。