2.9.8 处理 MySQL 编译问题

解决许多问题的方法包括重新配置。如果要重新配置,请注意以下几点:

  • 如果 CMake 在先前运行之后运行,则它可能会使用在其先前调用期间收集的信息。此信息存储在CMakeCache.txt中。当 CMake 启动时,它会假设该信息仍然正确,然后查找该文件并读取其内容(如果存在)。重新配置时,该假设无效。

  • 每次您运行 CMake 时,都必须再次运行 make 来重新编译。但是,您可能要先从以前的版本中删除旧的目标文件,因为它们是使用不同的配置选项编译的。

为了防止使用旧的目标文件或配置信息,请在重新运行 CMake 之前运行以下命令:

On Unix:

shell> make clean
shell> rm CMakeCache.txt

On Windows:

shell> devenv MySQL.sln /clean
shell> del CMakeCache.txt

如果您在源代码树之外进行构建,请在重新运行 CMake 之前删除并重新创建构建目录。有关在源代码树之外进行构建的说明,请参见如何使用 CMake 构建 MySQL 服务器

在某些系统上,由于系统包含文件中的差异,可能会出现警告。以下列 table 描述了在编译 MySQL 时发现最常见的其他问题:

  • 要定义要使用的 C 和 C 编译器,可以定义CCCXX环境变量。例如:
shell> CC=gcc
shell> CXX=g++
shell> export CC CXX

要指定自己的 C 和 C 编译器标志,请使用CMAKE_C_FLAGSCMAKE_CXX_FLAGS CMake 选项。参见Compiler Flags

若要查看可能需要指定的标志,请使用--cflags--cxxflags选项调用mysql_config

  • 要查看在编译阶段执行了哪些命令,请在使用 CMake 配置 MySQL 之后,运行 make VERBOSE = 1 而不是 make

  • 如果编译失败,请检查MYSQL_MAINTAINER_MODE选项是否已启用。此模式导致编译器警告变为错误,因此禁用它可能会使编译 continue 进行。

  • 如果编译失败并出现以下任何错误,则必须将 make 版本升级到 GNU make

make: Fatal error in reader: Makefile, line 18:
Badly formed macro assignment

Or:

make: file `Makefile' line 18: Must be a separator (:

Or:

pthread.h: No such file or directory

已知 Solaris 和 FreeBSD 具有麻烦的 make 程序。

已知可以使用 GNU make 3.75.

  • sql_yacc.cc文件是从sql_yacc.yy生成的。通常,构建过程不需要创建sql_yacc.cc,因为 MySQL 带有预生成的副本。但是,如果确实需要重新创建它,则可能会遇到此错误:
"sql_yacc.yy", line xxx fatal: default action causes potential...

这 table 明您的 yacc 版本不足。您可能需要安装 bison 的最新版本(yacc **的 GNU 版本)并使用它来代替。

早于 1.75 的 bison 版本可能报告此错误:

sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded

实际未超出最大 table 大小;该错误是由旧版本的 bison 中的错误引起的。

有关获取或更新工具的信息,请参阅第 2.9 节“从源代码安装 MySQL”中的系统要求。