1

除了我使用的是英特尔版本 12.1.3 之外,我遇到了与这篇文章中描述的相同的问题。(g++的标头<functional>受到保护,#ifdef __GXX_EXPERIMENTAL_CXX0X__使用 icpc 时未定义。)

而不是 using boost::functional,我想安装 gcc4.7 并使用它的标准库。

在 Ubuntu 11.10 我有gcc4.6.1,但我也gcc4.7gcc-snapshot包中安装。

英特尔有选项-gcc-name-gxx-name-cxxlib。所以最初我编译:

-std=c++0x -gcc-name=/usr/lib/gcc-snapshot/bin/gcc -gxx-name=/usr/lib/gcc-snapshot/bin/g++ -cxxlib=/usr/lib/gcc-snapshot/

但我得到了错误:

icpc: error #10282: file '/usr/lib/gcc-snapshot/bin/usr/lib/gcc-snapshot/bin/g++' not found, generated based on '-cxxlib=/usr/lib/gcc-snapshot/'

所以我编译了:

-std=c++0x -gcc-name=./gcc -gxx-name=./g++ -cxxlib=/usr/lib/gcc-snapshot/.

但我仍然收到警告和错误:

Warning #2928: the __GXX_EXPERIMENTAL_CXX0X__ macro is disabled when using GNU version 4.6 with the c++0x option

error: namespace "std" has no member "function"

警告清楚地表明它仍在使用 4.6 版。有人知道如何让英特尔使用正确的库吗?

4

1 回答 1

0

我发现如果你使用带有标志 -v -Q 的 gcc(或 g++)编译,你会得到一个标志和定义列表。它可能会帮助您了解 gcc 的作用,因此您可以在 icpc 中使用相同的 -D/-U。g++ -E 也将在不编译的情况下进行预处理:您可以从中获得有用的路径信息。

于 2012-04-17T00:38:58.550 回答