2.8.8 处理编译 MySQL 时出现的问题
解决许多问题涉及重新配置。如果你重新配置,记住以下几点:
-
如果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到GNUmake:
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程序。
GNUmake 3.75已知可用。
-
sql_yacc.cc
文件来自sql_yacc.yy
。通常,编译过程不需要创建sql_yacc.cc
,因为MySQL带有预生成的副本。但是,如果您确实需要重新创建它,您可能会遇到这个错误:"sql_yacc.yy", line xxx fatal: default action causes potential...
这是yacc版本不够的迹象。您可能需要安装最近版本的bison(GNU版yacc)并使用它代替。
Versions of bison older than 1.75可能报告这个错误:
sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded
实际上,表最大大小未超过;错误是老版本bison中的bug。
关于获取或更新工具的信息,请参阅第2.8节,“从源代码安装MySQL”。