Как обеспечить Matlab старой версией gcc, которую он хочет? - PullRequest
8 голосов
/ 15 декабря 2011

На моем компьютере у меня Ubuntu 10.10 с gcc 4.4.4. Я пытаюсь скомпилировать некоторые mex-файлы, использующие CUDA, и получаю следующее сообщение об ошибке:

>> cns_build('hmax')
compiling...
/home/leMe/hmax/cns/source/common_dec.h(54): warning: omission of exception specification is incompatible with previous function "operator new(size_t)"
/usr/include/c++/4.4/new(91): here
/home/leMe/hmax/cns/source/common_dec.h(55): warning: omission of exception specification is incompatible with previous function "operator new[](size_t)"
/usr/include/c++/4.4/new(92): here
/home/leMe/hmax/cns/source/common_dec.h(56): warning: omission of exception specification is incompatible with previous function "operator delete(void *)"
/usr/include/c++/4.4/new(93): here
/home/leMe/hmax/cns/source/common_dec.h(57): warning: omission of exception specification is incompatible with previous function "operator delete[](void *)"
/usr/include/c++/4.4/new(94): here

Segmentation fault
CUDA preprocessing [nvcc] failed
Warning: You are using gcc version "4.4.4-14ubuntu5)".  The version
         currently supported with MEX is "4.2.3".
         For a list of currently supported compilers see: 
         http://www.mathworks.com/support/compilers/current_release/
CPU compilation successful

Я полагаю, связав Matlab с gcc 4.2.3, я могу избавиться от ошибки, но не знаю, как это сделать.

mex -setup дает мне следующие опции:

1: /home/leMe/Matlab/bin/gccopts.sh : 
      Template Options file for building gcc MEX-files

  2: /home/leMe/Matlab/bin/mexopts.sh : 
      Template Options file for building MEX-files via the system ANSI compiler

1 Ответ

9 голосов
/ 15 декабря 2011

Я решил это, изменив мой mexopts.sh file в ~/matlab/R2009b/mexopts.sh (измените с вашей версией matlab)

Найдите свою архитектуру (для меня это glnxa64) и измените ее следующим образом:

        ;;
    glnxa64) #<----------------------- FIND THIS
        RPATH="-Wl,-rpath-link,$TMW_ROOT/bin/$Arch"
        # StorageVersion: 1.0
        # CkeyName: GNU C
        # CkeyManufacturer: GNU
        # CkeyLanguage: C
        # CkeyVersion:
        CC='gcc-4.1' #<---------------------------------- CHANGE HERE
        CFLAGS='-ansi -D_GNU_SOURCE'
        CFLAGS="$CFLAGS  -fexceptions"
        CFLAGS="$CFLAGS -fPIC -fno-omit-frame-pointer -pthread"
        CLIBS="$RPATH $MLIBS -lm"
        COPTIMFLAGS='-O -DNDEBUG'
        CDEBUGFLAGS='-g'
        CLIBS="$CLIBS -lstdc++"
        #
        # C++keyName: GNU C++
        # C++keyManufacturer: GNU
        # C++keyLanguage: C++
        # C++keyVersion: 
        CXX='g++-4.1' #<---------------------------------- CHANGE HERE
        CXXFLAGS='-ansi -D_GNU_SOURCE'
        CXXFLAGS="$CXXFLAGS -fPIC -fno-omit-frame-pointer -pthread"
        CXXLIBS="$RPATH $MLIBS -lm"
        CXXOPTIMFLAGS='-O -DNDEBUG'
        CXXDEBUGFLAGS='-g'

PS: вам также нужно установить правильную версию gcc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...