MacOS驱动代码移植问题记录
在C程序移植到macos 驱动程序中时,一系列问题的记录。
解决问题完成后分析问题出现原因是:
1 strncpy函数未定义 – 根因分析:在libkern.h中发现已被弃用,使用strlcpy代替。
2 stdio.h找不到 – 根因分析:macos内核不支持大部分std库(linux 也不支持,只是代替实现很多)。
3 wchar.h找不到 xcode发现文件是可以跳转并查看到文件的 – 根因分析:macos内核不支持大部分应用层定义库, 也未定义宽字节,只能手动写转换。并且在头文件中已经用宏区分内核或应用层定义,在xcode中可以看到头文件,但是头文件中用很多宏区分开来定义了,所以不支持。
4 TRUE / FALSE 不能被重定义,并且重定义了也不会提示错误或警告 – 根因分析:clang编译器支持这个关键字大写,但是重定义未提示错误(可能是我从警告中没看出来)。
5 驱动可以使用C++ 代码并编译成功,但是内核加载时,提示找不到符号 – 根因分析:C++未定义extern C 导出成C符号,在C代码中使用就会有问题。xcode和clang编译器检查不出来,但是加载内核时检查符号表时对不上。感觉默认macos驱动使用的是C++连接器。