我正在尝试使用 C++11,但 eclipse 遇到了一些问题。我使用 macports 来获取 gcc48,并且遵循了各种指南来让 eclipse 使用新编译器,包括 this , this , 我还将编译器命令从 eclipse 标准更改为 g++-mp-4.8,如解释的 here
我正在尝试构建以下程序:
#include <iostream>
#include<memory>
using namespace std;
int main() {
std::unique_ptr<double> ptr(new double);
*ptr = 11.345;
cout << (*ptr) << endl;
return 0;
}
终端会编译这个罚款,
make all
Building file: ../src/C++11.cpp
Invoking: Cross G++ Compiler
/opt/local/bin/g++ -I/opt/local/bin -I/opt/local/include -O0 -g3 -Wall -c -fmessage-length=0 -std=c++0x -MMD -MP -MF"src/C++11.d" -MT"src/C++11.d" -o "src/C++11.o" "../src/C++11.cpp"
Finished building: ../src/C++11.cpp
Building target: C++11
Invoking: Cross G++ Linker
g++ -o "C++11" ./src/C++11.o
Finished building target: C++11
程序按预期运行。但是,在 Eclipse 中,我仍然收到错误消息 Symbol 'unique_ptr' 无法解析
。
我想继续使用 Eclipse,而不仅仅是一个项目管理器和 makefile 生成器,因此我们将不胜感激!
最佳答案
可以使用 clang++,而不是使用 g++。我使用了答案Error when compiling some simple c++ code , clang 3.1 can't see unique_ptr?和 How to compile a C++0x code on Eclipse CDT on mac?作为制定以下步骤的指南:
在“项目”->“属性”->“C/C++ 构建”->“设置”->“Gcc C++ 编译器”->“命令”中更改编译器(将 g++ 更改为 clang++)。
在 Project->Properties->C/C++ Build -> Settings -> Gcc C++ Compiler -> Miscellaneous 中,将
-std=c++11 -stdlib=libc++
添加到标志。与 C/C++ Build -> Settings -> Gcc C++ Linker -> Command 下的链接器执行相同的操作
在“属性”->“C/C++ 构建”->“设置”->“Gcc C++ 链接器”->“其他”中,将
-stdlib=libc++
添加到链接器标志。在属性->C/C++常规->预处理器包含路径、宏等->提供程序->CDT GCC内置编译器设置中,关闭共享选项,并附加
-std=c+ +11
到命令以获取编译器规范。
编译工作完美,程序运行良好。 Eclipse 无法识别智能指针似乎是一个错误:请参阅 Turn off eclipse errors (that arent really errors)
关于Eclipse、Macos 10.8 和 C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17550450/