use c++11 if Darwin
detect eigen3
use biltin popcnt for gcc/clang
use uint32_t instead of size_t
GetExePath supports darwin
fix type
verify existence of eigen