许多问题的解决方法都涉及重新配置。如果你要重新配置,请注意以下几点:
如果在 CMake 之前已经运行过,它可能会使用在先前调用中收集的信息。此信息存储在
CMakeCache.txt
中。当 CMake 启动时,它会查找该文件,并在该文件存在的情况下读取其内容,假定该信息仍然正确。当您重新配置时,此假设是无效的。每次运行 CMake 时,您都必须再次运行 make 以重新编译。但是,您可能希望先删除旧版本的构建中产生的目标文件,因为这些文件是使用不同的配置选项编译的。
为了防止使用旧的目标文件或配置信息,请在重新运行 CMake 之前运行以下命令:
在 Unix 上
$> make clean
$> rm CMakeCache.txt
在 Windows 上
$> devenv MySQL.sln /clean
$> del CMakeCache.txt
如果您在源代码树之外进行构建,请在重新运行 CMake 之前删除并重新创建构建目录。有关在源代码树之外进行构建的说明,请参阅 如何使用 CMake 构建 MySQL 服务器。
在某些系统上,由于系统包含文件的差异,可能会出现警告。以下列表描述了在编译 MySQL 时最常出现的其他问题:
要定义要使用的 C 和 C++ 编译器,您可以定义
CC
和CXX
环境变量。例如:$> CC=gcc $> CXX=g++ $> export CC CXX
虽然这可以在命令行上完成,如刚刚所示,但您可能更喜欢在构建脚本中定义这些值,在这种情况下,export 命令是不需要的。
要指定您自己的 C 和 C++ 编译器标志,请使用
CMAKE_C_FLAGS
和CMAKE_CXX_FLAGS
CMake 选项。请参阅 编译器标志。要查看您可能需要指定的标志,请使用 mysql_config 命令以及
--cflags
和--cxxflags
选项。要查看在编译阶段执行的命令,请使用 CMake 配置 MySQL 后,运行 make VERBOSE=1 而不是仅仅运行 make。
如果编译失败,请检查是否启用了
MYSQL_MAINTAINER_MODE
选项。此模式会导致编译器警告变为错误,因此禁用它可以使编译继续进行。如果您的编译失败并出现以下任一错误,则必须将您的 make 版本升级到 GNU make:
make: Fatal error in reader: Makefile, line 18: Badly formed macro assignment
或
make: file `Makefile' line 18: Must be a separator (:
或
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...
这表明您的 yacc 版本存在缺陷。您可能需要安装最新版本的 bison(yacc 的 GNU 版本)并使用它来代替。
早于 1.75 版本的 bison 可能会报告以下错误:
sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded
实际上并没有超出最大表大小;该错误是由旧版本 bison 中的错误引起的。
有关获取或更新工具的信息,请参阅 第 2.8 节,“从源代码安装 MySQL” 中的系统要求。