解决的问题=>最后看到更新
我正在尝试使用std :: function但它看起来只是包含< functional>没有提供定义.我试图编译以下代码:
@H_404_13@#include <functional> std::function<int(int)> f = nullptr;用c 11作为编译选项:
@H_404_13@% clang++ -c -std=c++11 t.cc原因:
@H_404_13@t.cc:3:6: error: no type named 'function' in namespace 'std' std::function<int(int)> f = nullptr; ~~~~~^ t.cc:3:14: error: expected unqualified-id std::function<int(int)> f = nullptr; ^ 2 errors generated.我错过了什么?我知道C很好但是对clang / C 11来说很新,因此我猜想我缺乏重要的知识.
我在MacOS X 10.8上使用clang.
更新1
我试过a sample at cppreference.com site但它也不会编译.提供一些选择解决问题?
更新2
尝试使用clang -c -std = c 11 -stdlib = libc 11 x.cc从cppreference.com上面的示例,编译器仍然说:
@H_404_13@x.cc:1:10: fatal error: 'functional' file not found #include <functional> ^ 1 error generated.哪里有功能?我想我应该给-stdlib = libc 11或者其他什么,但它也不起作用:
@H_404_13@clang: error: invalid library name in argument '-stdlib=libc++11'我如何找到-stdlib的参数列表? (注意:在手册页中,只有可用的选项是libc和libstdc,它们都不起作用)
或功能只是不起作用?
解决方法
对于C 11,最好始终调用clang为:clang -std = c 11 -stdlib = libc
我大部分时间都使用它,所以我将环境变量$CXX设置为此值.这样,我在编译和链接中都获得了方言和库选项. -std = c 11不足,因为clang仍将使用/usr/include / c /4.2.1中的(旧)系统gcc头.
-stdlib = libc将使用/usr/lib / c / v1中的clang头,例如< functional>.
有一个similar question,答案是Howard Hinnant,他是(IIRC)的Apple工程师.