matConvNet安装错误


  1. 错误 relocation *****
    添加test.cpp ( int main(void) { return 0; } ) 文件,可以放到./matlab/src/下,同时在vl_compilenn中添加这个src,这样就可以自动编译

  2. 错误fpic
    在cpu版本时,因为缺少-fPIC会有问题,所以在ccoptim中添加,同时gpu版本中保留也没问题;fPIC是产生位置无关的代码,即动态链接库必须添加

  3. 错误
    如果缺少-c以及-cxx则会出现 only ET_DYN and ET_EXEC can be loaded.

  4. 错误
    在mex-link 缺少了-shared 命令,虽然编译通过,但是在test时候会cannot dynamically load executable

  5. 错误
    在编译gpu版本,有些so不知道怎么提前给出,但是通过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.so

  6. warning
    gcc version的问题不是根本问题,其实没必要更换,就算是更换,其实也没必要直接删除旧版本,其实可以用alternative gcc/g++的方式实现,不过总之得root身份,没有的话就算了;
    另外,cuda-version,cudnn-version,matlab-version也不是错误的原因,只要是基本能匹配就可以,没比亚完全一致,不过warning是一定的

  7. vl_compilenn
    该函数主要分为3部分,第一部分是构建参数,第二部分是compile,第三部分是mex-link,读者可以自己去对应。每次出错后再重新执行该文件,都需要把compile和link都重新做,是没有太大必要的。如果只是link error,那么可以把compile部分给block掉,用if 0 XXX end 方式就可以。不过如果compile部分有修改,则需要重新compile。
    无论是cpu还是gpu,都是如此。另外,gpu相对cpu,主要改的就是compile,在mex-link上还是一样的,可能在linkpass参数上有区别。

  8. mexlink错误
    mex-link错误的原因多是找不到,如果手写link的话,一般是-la或者-L/path/to/link -la这般。既然路径找不到,不妨直接把vl_compilenn中mexlink的路径直接写清楚,按照刚提到的这般去写即可。

相比cpu版本,gpu版本启动慢,运行快;如果上面的错误都修改好了,那就应该没问题了。

PS:成功编译matconvnet花了两天的时间研究,中间屡次想要放弃,但是这个自己最熟悉matlab了,想要转python也不是那么轻松。而且别人的工作是基于这个平台,想要转的话,需要把代码转换过去也不是那么简单的事情。终于把骨头啃下来了!!!太爽了!!!像这种没有网络教程的安装工作,还是第一次完成,果然很难。

推荐阅读更多精彩内容