ubuntu18.04源码安装gcc-6.3和vlfeat

最近有个项目要在MATLAB中使用vlfeat,在编译安装的时候又踩了不少坑。在此分享一下。

1.源码安装gcc-6.3

参考:

[1]https://www.w3xue.com/exp/article/20191/16725.html

[2]https://blog.csdn.net/XCCCCZ/article/details/80958414

[3]https://blog.csdn.net/futangxiang4793/article/details/88660550

[4]https://www.ph0en1x.space/2018/04/23/ubuntu_vlfeat/

因为vlfeat只能用gcc-6.3编译,但是ubuntu18.04里默认的gcc6版本是6.5。所以只能手动安装。

安装gcc之前需要安装gmp,mpfr,mpc,isl这几个库。参考[1]里讲的很清楚。但是也有几个需要注意的地方。

安装这些库的时候最好用gcc>5.0的版本。有一个库好象是isl需要使用>5.0的gcc安装,否则会报错。

 

(1)安装gmp

下载地址:https://gmplib.org/

 

  1. $cd gmp-6.1.2/
  2. $ mkdir build
  3. $ cd build/
  4. $ ../configure --prefix=/usr/local/gmp-6.1.2
  5. $ make -j12
  6. $ sudo make install

[问题一]:

在安装gmp之后,在安装isl时出现了cannot find gmp.h错误,但是查看相应的路径/usr/local/gmp-6.1.2/include/gmp.h,明明是已经存在的。

[解决方法]:

执行了下列命令就好了,但是不知道为什么。

$ sudo apt install libgmp-dev

 

(2)安装mpfr

下载地址:https://www.mpfr.org/ 

  1. $cd mpfr-4.0.2/
  2. $ mkdir build
  3. $ cd build/
  4. $ ../configure --prefix=/usr/local/mpfr-4.0.2 --with-gmp=/usr/local/gmp-6.1.2
  5. $ make -j12
  6. $ sudo make install

 

  (3)安装mpc

下载地址:http://www.multiprecision.org/mpc/

  1. $ cd mpc-1.1.0/
  2. $ mkdir build
  3. $ cd build/
  4. $ ../configure --prefix=/usr/local/mpc-1.1.0 --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-4.0.2
  5. $ make -j12
  6. $ sudo make install

 

(4)安装isl

下载地址:http://isl.gforge.inria.fr/

  1. $ cd isl-0.18/
  2. $ mkdir build
  3. $ cd build/
  4. $ ../configure --prefix=/usr/local/isl-0.18 --with-gmp=/usr/local/gmp-6.1.2
  5. $ make -j12
  6. $ sudo make install

[问题二]:

这里遇到的问题就是,isl最新的版本已经出到了0.22,于是刚开始下载安装的是0.22的版本,但是出现了以下错误

gcc statistics.h GATHER_STATISTICS20must defined

在网上查了说可能是isl-0.22冲突的问题

[解决方法]:

卸载了isl-0.22,安装isl-0.18就好了。

 

(5)安装gcc-6.3

下载地址:https://ftp.gnu.org/gnu/gcc/gcc-6.3.0/

安装前先编辑好环境变量:

  1. $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-1.1.0/lib:/usr/local/gmp-6.1.2/lib:/usr/local/mpfr-4.0.2/lib:/usr/local/isl-0.18/lib:/usr/local/lib:/usr/lis/x86_64-linux-gnu

然后再安装:

  1. $ cd gcc-6.3.0/
  2. $ mkdir build
  3. $ cd build/
  4. $ ../configure --prefix=/usr/local/gcc-6.3 --disable-multilib --with-system-zlib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-4.0.2 --with-mpc=/usr/local/mpc-1.1.0 --with-isl=/usr/local/isl-0.18
  5. $ make -j12
  6. $ sudo make install

[问题三]:

这一步很多博主说,要执行sudo update-alternatives --remove-all gcc来卸载旧的gcc。但是这样会出现make的时候找不到编译器的问题:

no acceptable C compiler found in $PATH

[解决方法]:

不卸载gcc,gcc是可以多版本共存的。事实证明没卸载也安装成功了。

 

[问题四]:

make的过程中,出现了如下错误:

error:  dereferencing pointer to incomplete type 'struct ucontext'

   sc = (struct sigcontext *)(void *) &uc_->uc_mcontext);

[解决方法]:

找到出错的源代码,把 struct ucontext * uc_ = context->cfa 改成 struct ucontext_t * uc_ = context->cfa 再make就可以了。

 

[问题五] :

同样是make过程中报的错

aggregate ‘sigaltstack handler_stack’ has incomplete type and cannot be defined

           struct sigaltstack handler_stack;

这是由于libsanitier跟最新的glibc冲突了。

[解决方法] :

https://reviews.llvm.org/D35246

照着上面的网站把

*libsanitizer/sanitizer_common/sanitizer_linux.h

*libsanitizer/sanitizer_common/sanitizer_linux.cc

*libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc

*libsanitizer/tsan/tsan_platform_linux.cc
四个文件源代码改了就好了。

 

[问题六]:

编译的时候出现

This configuration is not supported in the following subdirectories:

[解决方法]:

https://stackoverflow.com/questions/29981492/gcc-4-9-2-installation-failed-on-linux

这里把除了LD_LIBRARY_PATH之外的环境变量全部置空,就可以了。有博主说要把LD_LIBRARY_PATH也置空,但是我试了之后出现了找不到上面安装的库的问题。

$ export $C_INCLUDE_PATH=

$ export $CPLUS_INCLUDE_PATH=

$ export $LIBRARY_PATH=

 

[问题七]:

编译的时候还遇到了如下问题:

recipe for target 'all-recursive' failed

[解决办法]:

这个实际上是由问题五引起的。由于编译输出太长,最后只能看到这个信息。但是实际的报错信息在中间部分。建议最好下一个高亮插件,比较容易找到错误。

 

(6)替换gcc

  1. $ cd /usr/bin
  2. $ sudo rm gcc g++
  3. $ sudo ln -s /usr/local/gcc-6.3/bin/gcc gcc
  4. $ sudo ln -s /usr/local/gcc-6.3/bin/g++ g++

再用gcc -v 和g++ -v查看一下版本,如果版本对就没问题了。

 

2.安装vlfeat-matlab

终于到了第二步了,gcc源码编译真的麻烦...... vlfeat还是比较简单的。

下载地址:http://www.vlfeat.org/download.html

注意:有的博客说直接在matlab命令行运行vl_setup就可以。但是那样会出现以下错误

Warning: Name is nonexistent or not a directory: ..\Adv. 3D Computer Vision\vlfeat\toolbox\mex\mexw32

这是因为vlfeat直接在matlab中编译只支持windows.在ubuntu下要用makefile来编译。

 

(1)安装vlfeat

有博主说要先修改makefile。添加或者注释一行DISABLE_OPENMP=yes。但是我查看官网后发现,如果是苹果系统才要添加这一句。如果是matlab+ubuntu支持不需要。

首先添加环境变量。打开/etc/ld.so.conf添加一行

vlfeat_ROOT/toolbox/mex/mexa64

再刷新环境配置

$ sudo ldconfig

最后再编译

  1. $ cd vlfeat_ROOT
  2. $ make MEX=matlab_ROOT/bin/mex CC=gcc

编译成功后进入matlab命令行输入

run('vlfeat_ROOT/toolbox/vl_setup.m')

运行好之后输入vl_version来检测。如果有输出版本就是装好了。

 

[问题一]:

编译的时候报错

command not found cc, make error

[解决方法]:

这是由于系统找不到编译器引起的。虽然之前已经安装了gcc-6.3并且gcc -v也成功输出了。可能是路径问题引起的。所以在make时指定编译器

make CC=gcc

 

[问题二]:

执行make的时候出现了如下问题:

toolbox/mexutils.h:175:10: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘void

[解决方法]:

查看这段代码之后发现,这部分是用于减少gcc编译过程中的undefined symbol问题。直接注释掉这段代码解决了这个问题。

 

[问题三]:

编译完成并且matlab执行vl_setup后,执行vl_version时出现了这个问题

error while loading shared libraries: libvl.so

[解决方法]:

发现是ld.so.conf路径添加错了,改过来就好了。在bashrc中设置LD_LIBRARY_PATH应该也能解决这个问题。

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值