eos-vm icon indicating copy to clipboard operation
eos-vm copied to clipboard

Compile error in MacOS

Open Frank-AFN opened this issue 6 years ago • 1 comments

Env: MacOS Catalina (also tried in OS version MacOS High Serria) Clang:

  • Apple clang version 11.0.0 (clang-1100.0.33.8)
  • Target: x86_64-apple-darwin19.0.0
  • Thread model: posix
  • InstalledDir: /Applications/Xcode11.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin (also tried in clang version 10.0.1)

llvm: 7.1.0 (also tried in llvm version 9.0.0)

Compile Error:

Scanning dependencies of target hello-driver [ 98%] Building CXX object tools/CMakeFiles/hello-driver.dir/hello_driver.cpp.o In file included from /Users/zhangyy/CLionProjects/eos-vm/tools/hello_driver.cpp:1: In file included from /Users/zhangyy/CLionProjects/eos-vm/include/eosio/vm/backend.hpp:3: /Users/zhangyy/CLionProjects/eos-vm/include/eosio/vm/allocator.hpp:213:45: error: no member named 'extract' in 'std::__1::set<std::__1::pair<unsigned long, void *>, eosio::vm::jit_allocator::by_size, std::__1::allocator<std::__1::pair<unsigned long, void *> > >' auto node = free_blocks_by_size.extract({lhs->second, lhs->first}); ~~~~~~~~~~~~~~~~~~~ ^ /Users/zhangyy/CLionProjects/eos-vm/include/eosio/vm/allocator.hpp:174:27: error: no member named 'extract' in 'std::__1::map<void *, unsigned long, std::__1::less<void *>, std::__1::allocator<std::__1::pair<void *const, unsigned long> > >' auto node = from.extract(key); ~~~~ ^ /Users/zhangyy/CLionProjects/eos-vm/include/eosio/vm/allocator.hpp:106:10: note: in instantiation of function template specialization 'eosio::vm::jit_allocator::transfer_node<std::__1::map<void *, unsigned long, std::__1::less<void *>, std::__1::allocator<std::__1::pair<void *const, unsigned long> > > >' requested here transfer_node(free_blocks, allocated_blocks, best->second); ^ /Users/zhangyy/CLionProjects/eos-vm/include/eosio/vm/allocator.hpp:174:27: error: no member named 'extract' in 'std::__1::set<std::__1::pair<unsigned long, void *>, eosio::vm::jit_allocator::by_size, std::__1::allocator<std::__1::pair<unsigned long, void *> > >' auto node = from.extract(key); ~~~~ ^ /Users/zhangyy/CLionProjects/eos-vm/include/eosio/vm/allocator.hpp:107:17: note: in instantiation of function template specialization 'eosio::vm::jit_allocator::transfer_node<std::__1::set<std::__1::pair<unsigned long, void *>, eosio::vm::jit_allocator::by_size, std::__1::allocator<std::__1::pair<unsigned long, void *> > > >' requested here best = transfer_node(free_blocks_by_size, allocated_blocks_by_size, *best); ^ 3 errors generated. make[2]: *** [tools/CMakeFiles/hello-driver.dir/hello_driver.cpp.o] Error 1 make[1]: *** [tools/CMakeFiles/hello-driver.dir/all] Error 2 make: *** [all] Error 2

It seems Clang does not support C++17 feature map and set extract function.

Frank-AFN avatar Oct 11 '19 05:10 Frank-AFN

  1. download the latest libc++ source code from llvm
  2. add the following code in 'eos-vm/CMakeLists.txt' SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdinc++ -I <libcxx-install-prefix>/include")
  3. recompile eos-vm

peekpi avatar Jan 05 '20 10:01 peekpi