Microos Microos - 2 months ago 173
C++ Question

Compiling with clang++ on OSX but cannot include/find header files

I'm trying to install the spams toolbox on Matlab for optimizing sparse representation problems.


The download page-> http://spams-devel.gforge.inria.fr/downloads.html


At very first place, when I tried to compile it with
compile.m
script, it said that :

clang: error: unsupported option '-fopenmp'
error: command 'clang' failed with exit status 1


And then, I found this post, I followed the instruction below, and it seems the previous error was fixed.




enter image description here




But now, I am getting error says that:

...mexArchetypalAnalysis.cpp:32:
./linalg/mexutils.h:15:10:
fatal error: 'typeinfo' file not found
#include <typeinfo>


When I went to the source file and comment this line, it gave me error on including iostream:
enter image description here

So I may think it is the problem about the libraries but I am not familiar with the C++ or C something, I need some helps.

Answer

Finally, I fixed this by doing steps below:

Install gcc compiler and openmp support by homebrew:

brew install gcc --without-multilib

After installation, In command line:

alias gcc=gcc-6
alias clang=gcc-6
alias g++=g++-6

by doing so, you can use the cpp compiler with openmp support.


Let run a test program to check if openmp works correctly:

#include <stdio.h>
#include <omp.h>

int  print(int i){
    int tmp = 0;
    for(int i=0;i<100000000;i++){
        tmp += 1; // time consuming loop
    }

    printf("%d\t",i);
    return i;
}

int main(){

    #pragma omp parallel for
    for(int i=0; i<10;i++){
       print(i);
    }
    return 0;
}

Compile:

gcc -fopenmp test.cpp -o run

or

g++ -fopenmp test.cpp -o run

Output:

0   8   3   6   1   9   4   7   2   5

As you can see they are not printed in orders, this indicates openmp works correctly.