### 2.9.8 处理编译 MySQL 的问题

[](<>)[](<>)[](<>)[](<>)[](<>)

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

[](<>)[](<>)

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

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

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

    在 Unix 上：


```
$> make clean
$> rm CMakeCache.txt
```

在 Windows 上：

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

如果您在源代码树之外构建，请在重新运行之前删除并重新创建您的构建目录**制作**.有关在源代码树之外构建的说明，请参阅[如何使用 CMake 构建 MySQL 服务器](https://dev.mysql.com/doc/internals/en/cmake.html).

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

-   [](<>) [](<>) [](<>) [](<>)要定义要使用的 C 和 C++ 编译器，您可以定义`抄送`和`CXX`环境变量。例如：

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

    要指定您自己的 C 和 C++ 编译器标志，请使用[`CMAKE_C_FLAGS`](source-configuration-options.html#option_cmake_cmake_c_flags)和[`CMAKE_CXX_FLAGS`](source-configuration-options.html#option_cmake_cmake_cxx_flags)CMake 选项。看[编译器标志](source-configuration-options.html#cmake-compiler-flags).

    要查看您可能需要指定哪些标志，请调用[**mysql\_配置**](mysql-config.html)与[`--cflags`](mysql-config.html#option_mysql_config_cflags)和[`--cxxflags`](mysql-config.html#option_mysql_config_cxxflags)选项。

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

-   如果编译失败，检查是否[`MYSQL_MAINTAINER_MODE`](source-configuration-options.html#option_cmake_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”](source-installation.html).
