错误源自用g++的交叉编译工具链编译eudev。经过一番查找,发现在 errno.h 这个头文件中有 program_invocation_short_name 的 extern 定义。
经过查看 eudev的源码,发现相关的源文件都包含了 errno.h 这个头文件。
然后去翻看两种toolchain中的 errno.h 的差别,发现 相关extern语句的条件编译的条件不同。
尝试修改eudev的源码,使其满足条件编译中的条件,发现又会牵扯出一系列错误,为了源码能够编译成功,索性直接将用到 program_invocation_short_name 这个变量的地方全部用执行的字符串代替,比如,在编译eudev时,直接用"udev"替换 program_invocation_short_name 这个变量。