问题背景
PHP7.27 编译pdo_mysql 或者 mysqli 扩展时报错:ext/mysqlnd/mysqlnd.h:没有那个文件或目录
问题截图
在包含自 /path/to/php-7.2.7/ext/pdo_mysql/pdo_mysql.c:32 的文件中:
/path/to/php-7.2.7/ext/pdo_mysql/php_pdo_mysql_int.h:27:34: 错误:ext/mysqlnd/mysqlnd.h:没有那个文件或目录
/path/to/php-7.2.7/ext/pdo_mysql/php_pdo_mysql_int.h:28:50: 错误:ext/mysqlnd/mysqlnd_libmysql_compat.h:没有那个文件或目录
/path/to/php-7.2.7/ext/pdo_mysql/php_pdo_mysql_int.h:69:39: 错误:ext/mysqlnd/mysqlnd_debug.h:没有那个文件或目录
In file included from /path/to/php-7.2.7/ext/pdo_mysql/pdo_mysql.c:32:
/path/to/php-7.2.7/ext/pdo_mysql/php_pdo_mysql_int.h:105: 错误:expected specifier-qualifier-list before ‘MYSQL’
/path/to/php-7.2.7/ext/pdo_mysql/php_pdo_mysql_int.h:120: 错误:expected specifier-qualifier-list before ‘MYSQL_FIELD’
/path/to/php-7.2.7/ext/pdo_mysql/php_pdo_mysql_int.h:125: 错误:expected specifier-qualifier-list before ‘MYSQL_RES’
/path/to/php-7.2.7/ext/pdo_mysql/pdo_mysql.c:64:45: 错误:ext/mysqlnd/mysqlnd_reverse_api.h:没有那个文件或目录
/path/to/php-7.2.7/ext/pdo_mysql/pdo_mysql.c:65: 错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/path/to/php-7.2.7/ext/pdo_mysql/pdo_mysql.c:85: 错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘pdo_mysql_reverse_api’
/path/to/php-7.2.7/ext/pdo_mysql/pdo_mysql.c: 在函数‘zm_startup_pdo_mysql’中:
/path/to/php-7.2.7/ext/pdo_mysql/pdo_mysql.c:138: 错误:‘pdo_mysql_reverse_api’未声明(在此函数内第一次使用)
/path/to/php-7.2.7/ext/pdo_mysql/pdo_mysql.c:138: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
/path/to/php-7.2.7/ext/pdo_mysql/pdo_mysql.c:138: 错误:所在的函数内也只报告一次。)
make: *** [pdo_mysql.lo] 错误 1
问题原因
经定位:locatemysqlnd.h文件确实存在,路径为:/path/to/php-7.2.7/ext/mysqlnd/mysqlnd.h,
不过图示中要引用的mysqlnd.h文件位置却是:/path/to/php-7.2.7/ext/pdo_mysql/etc/mysqlnd/mysqlnd.h,
说到这明白问题所在了吧,不过感觉这是扩展编写存在BUG。
解决方案
既然mysqlnd.h文件是存在的,那么我们来个软链引用过来即可:
ln -s /path/to/php-7.2.7/ext/ /path/to/php-7.2.7/ext/pdo_mysql/etc/