我有一些任意的时代,比如1988年7月13日.基本上我想测量相对于此的时间.我正在考虑编写一个自定义时钟类,以便我可以编写这样的代码:
using std::chrono;
time_point<My_Clock> tp;
std::cout << duration_cast<seconds>(tp.time_since_epoch()).count() << std::endl;
Run Code Online (Sandbox Code Playgroud)
这可能吗?如果没有,最简洁的方法是什么?
我正在尝试向Raspberry Pi移植一个大型项目,该项目大量使用C++ 11特性.该项目使用CMAKE,我使用crosstool-ng进行交叉编译.我在Pi上安装了依赖项并在本地复制它们,我设法让CMAKE找到它们.一些代码正确构建并生成ARM输出.但是,大多数代码都因令人困惑的GCC输出而失败,我非常肯定与C++ 11 /模板支持有关.例如,我得到这样的错误:
error: 'mutex' in namespace 'std' does not name a type
(有问题的文件包含<thread>,如果我还包含<mutex>,则此错误消失,而不是x86 Ubuntu的要求)
error: expected class-name before '{' token
(前{的行是:template<typename _Res> class __basic_future : public std::__future_base
)
error: '__result_type' does not name a type
(这可能是由于上面的错误而发生的)
这些错误看起来像ARM g ++编译器不太喜欢模板.正在使用的g ++版本是arm-unknown-linux-gnueabi-g++ (crosstool-NG 1.18.0) 4.7.3 20130102 (prerelease)
.
谁能指出我正确的方向?
编辑:以下是其中一个文件的g ++外观ps
:
arm-unknown-linux-gnueabi-g++ -DprojectCore_EXPORTS -fPIC
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/freetype2
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/glib-2.0
-I/home/sagar/workspace/RaspberryPi/target_env/usr/lib/arm-linux-gnueabihf/glib-2.0/include
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/gdk-pixbuf-2.0
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/gtk-2.0
-I/home/sagar/workspace/RaspberryPi/target_env/usr/lib/arm-linux-gnueabihf/gtk-2.0/include
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/cairo
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/pango-1.0
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/atk-1.0
-I/home/sagar/workspace/RaspberryPi/target_env/usr/local/include
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/eigen3
-I/home/sagar/workspace/RaspberryPi/target_env/usr/include/flann
-I/home/sagar/workspace/project/include -std=c++0x -Wall -Werror -Wno-deprecated -fPIC -g -O4 …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个libtooling重构工具.我有一个类,比方说Foo
,在一个标题中定义foo.h
.我想看看是否foo.h
包含在文件中.目前,要检查是否bar.cc
包含foo.h
,我只是匹配使用recordDecl(hasName("Foo"))
.这是有效的,因为预处理class Foo { ... };
后将存在于bar.cc
AST 内部,如果bar.cc
包含foo.h
.
但是,如果,例如,bar.cc
包括cat.h
哪些包括,则这不起作用foo.h
.我想bar.cc
明确包括foo.h
.
此外,我希望能够匹配#define
宏.
我编写工具的方式使得这两个目标无法实现,因为我匹配的AST已经过预处理.我正在努力做甚么可能吗?我Preprocessor
在Clang的Doxygen页面上找到了类参考,但我还没有找到我正在寻找的东西.
我正在尝试为Raspberry Pi交叉编译一个大型项目.我正在使用由crosstool-ng,gcc版本4.7.3构建的工具链.当编译看到std :: shared_future时,编译会产生阻塞.我收到此错误:
test.cpp:5:27: error: aggregate 'std::shared_future<int> xxx' has incomplete type and cannot be defined
Run Code Online (Sandbox Code Playgroud)
这是生成该错误的源文件:
#include <future>
int main()
{
std::shared_future<int> xxx;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个相同的源文件在Rapsberry Pi本身上成功编译.这是crosstool工具链中的错误吗?有解决方法吗?如何才能成功编译?
我正在尝试在RedHat 6.4上编译cmake-3.1.0-rc1。我已经在/ usr / local下构建并安装了gcc / g ++ 4.7.4,但是CMake的bootstrap
步骤失败并显示以下错误:
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by $HOME/src/cmake-3.1.0-rc1/build/Bootstrap.cmk/cmake)
Run Code Online (Sandbox Code Playgroud)
的确,at的文件/usr/lib64/libstdc++.so.6
不包含GLIBCXX_3.4.15
,但是我不希望CMake使用该文件。我希望它使用处/usr/local/lib/libstdc++.so.6
包含的GLIBCXX_3.4.15
(由证明strings /usr/local/lib/libstdc++.so.6 | grep GLIBCXX
)。
有没有办法让引导的CMake使用.so
under /usr/local
而不是/usr/lib64
?理想情况下,它将是某种环境变量或CMake标志,因为我不想修改CMake源随附的CMakeLists文件。
编辑:我弄错了路径。实际上应该是/usr/local/lib64
。