compilation see "http://blog.csdn.net/deyangliu/article/details/41810747"