我在***的ubuntu11.04下编译leveldb的时候发现问题,但是在更早前的这个版本很正常:
yufeng@yufeng-laptop:/usr/src/leveldb$make g++-c-DLEVELDB_PLATFORM_POSIX-I.-I./include-std=c++0x-g2db/db_bench.cc-odb/db_bench.o Infileincludedfrom./port/port.h:14:0, from./util/coding.h:17, from./db/dbformat.h:13, from./db/db_impl.h:9, fromdb/db_bench.cc:8: ./port/port_posix.h:14:22:fatalerror:cstdatomic:没有那个文件或目录 compilationterminated. make:***[db/db_bench.o]错误1
我的编译环境:
$cat/etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=11.04 DISTRIB_CODENAME=natty DISTRIB_DESCRIPTION="Ubuntu11.04" $gcc-v Usingbuilt-inspecs. COLLECT_GCC=/usr/bin/gcc-4.5.real COLLECT_LTO_WRAPPER=/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/lto-wrapper Target:x86_64-linux-gnu Configuredwith:../src/configure-v--with-pkgversion='Ubuntu/Linaro4.5.2-8ubuntu4'--with-bugurl=file:///usr/share/doc/gcc-4.5/README.Bugs--enable-languages=c,c++,fortran,objc,obj-c++--prefix=/usr--program-suffix=-4.5--enable-shared--enable-multiarch--with-multiarch-defaults=x86_64-linux-gnu--enable-linker-build-id--with-system-zlib--libexecdir=/usr/lib/x86_64-linux-gnu--without-included-gettext--enable-threads=posix--with-gxx-include-dir=/usr/include/c++/4.5--libdir=/usr/lib/x86_64-linux-gnu--enable-nls--with-sysroot=/--enable-clocale=gnu--enable-libstdcxx-debug--enable-libstdcxx-time=yes--enable-plugin--enable-gold--enable-ld=default--with-plugin-ld=ld.gold--enable-objc-gc--disable-werror--with-arch-32=i686--with-tune=generic--enable-checking=release--build=x86_64-linux-gnu--host=x86_64-linux-gnu--target=x86_64-linux-gnu Threadmodel:posix gccversion4.5.2(Ubuntu/Linaro4.5.2-8ubuntu4)
头文件cstdatomic找不到, 简单的google下发现4.5的gcc这个头文件改名成atomic
It seems that cstdatomic was renamed to atomic in newer GCC versions.Replacing cstdatomic include with atomic include in the header worked for me. |
解决方法很简单:
修改./port/port_posix.h:14 成
#include
现在再实验下:
$make ... #跑测试案例 $makecheck
bingo, 玩得开心!
原文链接:http://blog.yufeng.info/archives/1319
【编辑推荐】
- LevelDB—一个超高性能的K/V数据库