2017-04-12 65 views
1

我想要編譯kenlm在OSX但我得到的錯誤:爲什麼std :: move undefined,雖然編譯器用-std = C++ 11調用?

error: no member named 'move' in namespace 'std' 

其他職位建議與

'-std=c++11'

編譯,但我仍然得到同樣的錯誤。我該如何解決這個問題?

g++ --version輸出:

Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 
Apple LLVM version 8.1.0 (clang-802.0.38) 
Target: x86_64-apple-darwin16.5.0 
Thread model: posix 
InstalledDir: /Library/Developer/CommandLineTools/usr/bin 

kenlm的構建腳本是這樣的:

from setuptools import setup, Extension 
import glob 
import platform 
import os 

#Does gcc compile with this header and library? 
def compile_test(header, library): 
    dummy_path = os.path.join(os.path.dirname(__file__), "dummy") 
    command = "bash -c \"g++ -include " + header + " -l" + library + " -x c++ - <<<'int main() {}' -o " + dummy_path + " >/dev/null 2>/dev/null && rm " + dummy_path + " 2>/dev/null\"" 
    return os.system(command) == 0 
... 

#We don't need -std=c++11 but python seems to be compiled with it now. https://github.com/kpu/kenlm/issues/86 
ARGS = ['-O3', '-DNDEBUG', '-DKENLM_MAX_ORDER=6', '-std=c++11'] 
ext_modules = [ 
    Extension(name='kenlm', 
     sources=FILES + ['python/kenlm.cpp'], 
     language='C++', 
     include_dirs=['.'], 
     libraries=LIBS, 
     extra_compile_args=ARGS) 
] 
... 

使用std::move代碼:

#ifndef UTIL_FILE_STREAM_H 
#define UTIL_FILE_STREAM_H 
#include <utility> 
#include "util/fake_ostream.hh" 
#include "util/file.hh" 
#include "util/scoped.hh" 

#include <cassert> 
#include <cstring> 

#include <stdint.h> 

namespace util { 

class FileStream : public FakeOStream<FileStream> { 
    public: 
    explicit FileStream(int out = -1, std::size_t buffer_size = 8192) 
     : buf_(util::MallocOrThrow(std::max<std::size_t>(buffer_size, kToStringMaxBytes))), 
     current_(static_cast<char*>(buf_.get())), 
     end_(current_ + std::max<std::size_t>(buffer_size, kToStringMaxBytes)), 
     fd_(out) {} 

#if __cplusplus >= 201103L 
    FileStream(FileStream &&from) noexcept : buf_(std::move(from.buf_)), current_(from.current_), end_(from.end_), fd_(from.fd_) { 
     from.end_ = reinterpret_cast<char*>(from.buf_.get()); 
     from.current_ = from.end_; 
    } 
#endif 
+0

'克++ --version'? – YSC

+0

添加到我的帖子 – bear

+2

的#include

回答

相關問題