Getting C++11 to work in XCode.

Getting C++11 to work in XCode.

I'm trying to compile and link a simple program testing some C++11 features.
main.cpp:

#include <mutex>
#include <memory>
#include <iostream>
using namespace std;
mutex m;
int main(int argc, const char * argv[])
{
    lock_guard<mutex>l(m);
    unique_ptr<string> sp(new string("Hello world"));
    cout << *sp <<  endl;
    return 0;
}

Running $icpc main.cpp -std=c++0x yields: main.cpp(9): catastrophic error: cannot open source file "mutex".
If I'm correct, icpc uses the c++ standard library of gcc, which by default is an old 4.2, even on an up-to-date OS X 10.8.
After installing gcc 4.7 from macports, the following worked: icpc main.cpp -std=c++0x -gcc-name=/opt/local/bin/gcc-mp-4.7 .

My problem now is to try and get it to compile in XCode. After switching the compiler to XE 13.0 and selecting -std=c++0x  I add -gcc-name=/opt/local/bin/gcc-mp-4.7 to "Additonal C options". I then get a compilation error "file '/Applications/Xcode.app/Contents/Developer/usr/bin/opt/local/bin/gcc-mp-4.7' not found, generated based on '-dev-usr-root /Applications/Xcode.app/Contents/Developer/usr'". Apparently /Applications/Xcode.app/Contents/Developer/usr/bin/ is appended to the paths.

Trying to work-around it by adding a soft-link to /opt at /Applications/Xcode.app/Contents/Developer/usr/bin/opt improves the situation, but then instead I get catastrophic error: cannot open source file "mutex". I tried adding -gxx-name=/opt/local/bin/g++-mp-4.7 without any improvement.

A related post seems to have succeeded, but it doesn't seem to work for me on OS X 10.8, XCode 4.6.1 and ICC 13.0.2.

It would be greatly appreciated if you could post a step-by-step instruction of how to get C++11 working in XCode with XE 13, using a recent libstd++ and/or libc++. Right now, this is really a show-stopper for me using the intel compiler suite.The best thing would certainly be if you could make it work out of the box with libc++.

5 Beiträge / 0 neu
Letzter Beitrag
Nähere Informationen zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.

>>...$icpc main.cpp -std=c++0x yields: main.cpp(9): catastrophic error: cannot open source file "mutex"...

Usage of Intel C++ compiler option -std=c++0x doesn't mean that the compiler will "emulate" a content of "mutex" header file. There are two reasons for that compilation error:

- "mutex" header file doesn't exist on your system ( take a look at a ../thr sub-directory )
- a path to a directory where "mutex" header file is located is still Not valid

I don't have a system with a Mac OS but I could verify your test on a WIndows 7 Professional OS with Intel C++ compiler v13 update 2.

>>... I could verify your test on a WIndows 7 Professional OS with Intel C++ compiler v13 update 2...

The test case was successfully compiled with VS 2012 because it is the only VS version with std threading support. But it has some problerm with:
...
cout << *sp << endl;
...
and it crashes when I tried to execute the test case.

Thanks Sergey for the input.

> Usage of Intel C++ compiler option -std=c++0x doesn't mean that the compiler will "emulate" a content of "mutex" header file.
No, I guess it only enables to core language definition of C++11, but not the standard library (which contains <mutex>).
Correct me if im wrong: My understanding is that icc does not have an own standard library implementation, but uses libstd++ (or possibly libc++?) and that it gets the settings/location of that by calling gcc/clang. Thus, as mentioned in the original post, the command line version compiles when I execute icpc main.cpp -std=c++0x -gcc-name=/opt/local/bin/gcc-mp-4.7, which is a version that has C++11 support.

My real question is: Given an unmodified installation of the most recent versions of OS X, XCode and XE/ICC, how do I get icpc in XCode to compile arbitrary C++11 code that relies on C++11 standard library features (such as mutex from <mutex> or unique-ptr from <memory>. The included code is just an example.

This is really mostly a question on:

  1. How is C++11 standard library setup recommended to be done in icpc on OS X (my solution is macports installation of gcc 4.7 and explicit usage of it, but is there some better/supported way)?
  2. Can one get libc++ (used by Apple) to work instead of libstdc++ (from GCC) as standard library implementation? That might increase compatibility with other Apple related code and wouldn't rely on a non-standard component (gcc 4.7)?
  3. How do I setup the XCode enviroment to make the above work, i.e. to include C++11 standard library header files and link to that C+11 standard library?

>The test case was successfully compiled with VS 2012 because it is the only VS version with std threading support. But it has some problerm with

I've verified that the code compiles an runs just fine on GCC 4.7.3 (installed from macports), OS X 10.8, XCode 4.6.1 and ICC 13.0.2. It's all standard c++11 code, so if it doesn't compile and run, it seems like a bug!?

Melden Sie sich an, um einen Kommentar zu hinterlassen.