# 2.9.8 处理编译 MySQL 的问题

许多问题的解决方案涉及重新配置。如果您重新配置,请注意以下事项:

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

  • 每次跑步制作,你必须跑制作再次重新编译。但是,您可能希望首先从以前的构建中删除旧的目标文件,因为它们是使用不同的配置选项编译的。

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

    在 Unix 上:

$> make clean
$> rm CMakeCache.txt

在 Windows 上:

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

如果您在源代码树之外构建,请在重新运行之前删除并重新创建您的构建目录制作.有关在源代码树之外构建的说明,请参阅如何使用 CMake 构建 MySQL 服务器 (opens new window).

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

  • 要定义要使用的 C 和 C++ 编译器,您可以定义抄送CXX环境变量。例如:

    $> CC=gcc
    $> CXX=g++
    $> export CC CXX
    

    要指定您自己的 C 和 C++ 编译器标志,请使用CMAKE_C_FLAGSCMAKE_CXX_FLAGSCMake 选项。看编译器标志.

    要查看您可能需要指定哪些标志,请调用mysql_配置--cflags--cxxflags选项。

  • 要查看在编译阶段执行了哪些命令,使用后制作配置 MySQL,运行使详细= 1而不仅仅是制作.

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

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

    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 很麻烦制作程式。

    GNU制作已知 3.75 可以工作。

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

    "sql_yacc.yy", line xxx fatal: default action causes potential...
    

    这表明您的版本yacc不足。您可能需要安装最新版本的野牛(GNU 版本的yacc) 并改用它。

    的版本野牛早于 1.75 可能会报告此错误:

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

    实际上并没有超过最大表大小;该错误是由旧版本的错误引起的野牛.

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