报错内容
/Users/niushaogang/jkbPhpPackage/php-5.4.45/main/reentrancy.c:139:23: error: too few arguments to function call, expected 3, have 2
readdir_r(dirp, entry);
~~~~~~~~~ ^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/dirent.h:110:5: note: 'readdir_r' declared here
int readdir_r(DIR *, struct dirent *, struct dirent **) __DARWIN_INODE64(readdir_r);
^
1 error generated.
make: *** [main/reentrancy.lo] Error 1
图片

解决办法
分析这个报错,就是php源码调用readdir_r函数的时候少传了一个参数。
查看这两个文件:
/Users/niushaogang/jkbPhpPackage/php-5.4.45/main/reentrancy.c:139:23:
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/dirent.h:110:5
函数定义:
int readdir_r(DIR *, struct dirent *, struct dirent **)
php调用:
readdir_r(dirp, entry)
分析函数参数,发现第三个值是第二个值的指针,好办了,修改php源码
/Users/niushaogang/jkbPhpPackage/php-5.4.45/main/reentrancy.c:139:23
139行,
readdir_r(dirp, entry) 修改为 readdir_r(dirp, entry,&entry)即可编译通过