原因是不同的Linux平台的 io.h 放置的位置不同。Windows下的io.h直接包含即可;
Linux平台下在sys文件夹下;ARM架构的系统中在sys文件夹下,而且名字也不一样,变成了uio.h
解决方法是,在包含io.h时添加宏定义分支,检测当前平台是Windows,x86 Linux还是ARM Linux。例如
#ifdef WIN32 //Windows
#include <direct.h>
#include <io.h>
#elif defined(__aarch64__)// Linux(ARM64)
#include <sys/uio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#else // Linux(x86)
#include <sys/io.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#endif
参考资料
https://blog.youkuaiyun.com/qq_42679415/article/details/126470064
https://www.jianshu.com/p/708ec21d821e