扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
所有MySQL程序在Solaris上使用gcc
编译并且没有任何警告。在其他系统上,由于系统包含文件的差别可能会发生警告。对于使用MIT-pthreads时发生的警告,见4.9 MIT-pthreads 注意事项。其他问题,检查下面的表。
许多问题的解决方案涉及重新配置。如果你确实需要重新配置,注意下列事项:
configure
在它已经被运行了以后运行,它可以使用先前收集的信息。这个信息被存储在“config.cache”里面。当configure
启动时,它寻找该文件而且如果它存在,假定信息仍然是正确的,读入它的内容。当你重新配置时,该假设是无效的。
configure
时候,你必须运行make
再重新编译。然而, 你可能想要把先前构造的老的目标文件删除,因为他们使用不同的配置选项被编译。 为了防止使用旧的配置信息或目标文件,在重新运行configure
前运行这些命令:
shell>rm config.cache shell>make clean
另外,你可以运行make distclean
。
下表描述了一些最常发生的编译MySQL的问题:
Internal compiler error: program cc1plus got fatal signal 11 或 Out of virtual memory 或 Virtual memory exhausted
该问题是gcc
要求大量的内存编译带有嵌入函数(inline function)的“sql_yacc.cc”。试试以--with-low-memory
选项运行configure
:
shell>./configure -- with-low-memory
如果你正在使用gcc
,该选项使得将-fno-inline
加到编译行,如果你正在使用其他的编译器,则加入-O0
。你应该试一试--with-low-memory
选项,即使你有特别多的存储器和交换空间,而你认为不能可能运行得溢出。这个问题甚至在很慷慨的硬件配置的系统上出现,通常用--with-low-memory
选项修正它。
configure
挑选c++
作为编译器名字并用-lg++
选项的GNU c++
链接。如果你正在使用gcc
,这个特性在配置期间导致如下问题: configure: error: installation or configuration problem: C++ compiler cannot create executables.
你可能也在编译期间看到g++
、libg++
或libstdc++
相关的问题。这些问题的一个原因是你可能没有g++
,或你可能有g++
但无libg++
或libstdc++
。看一下“config.log”文件。它应该包含你的c++编译器不能工作的准确原因!为了解决这些问题,你可以使用gcc
作为你的C++编译器。试试设置环境变量CXX
为"gcc -O3"
。例如:
shell>CXX="gcc -O3" ./configure
它能工作,因为gcc
象g++
一样编译C++源代码,但缺省地它不链接libg++
或libstdc++
。解决这些问题的其他方法当然是安装g++
、libg++
和libstdc++
。
make
版本到GNUmake
: making all in mit-pthreads 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已知能工作。
CFLAGS
和CXXFLAGS
环境变量中即可。你也能使用CC
和CXX
来指定编译器名字。例如: shell>CC=gcc shell>CFLAGS=-O6 shell>CXX=gcc shell>CXXFLAGS=-O6 shell>export CC CFLAGS CXX CXXFLAGS
对于已经知道在不同系统上有用的标志定义列表,见4.14 TcX 二进制代码。
gcc
编译器: client/libmysql.c:273: parse error brfore '__attribute__'
gcc
2.8.1已知可以工作,但是我们推荐使用egcs
1.0.3a或更新。
mysqld
时显示例如下面的那些错误, configure
没有正确地检测传到accept()
、getsockname()
或getpeername()
最后参数的类型: cxx: Error: mysqld.cc, line 645: In this statement, the referenced type of the pointer value "&length" is "unsigned long", which is not compatible with "int". new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);
为了修正它,编辑“config.h”文件(它由configure
生成)。寻找这些行:
/* Define as the base type of the last arg to accept */ #define SOCKET_SIZE_TYPE XXX
更改XXX
为size_t
或int
,这取决于你的操作系统。(注意:你每次运行configure
都必须这样做,因为configure
重新生成“config.h”。)
"sql_yacc.yy", line xxx fatal: default action causes potential...
这是一个你的yacc
版本不完善的迹象。你可能需要安装bison
(GNU 版本yacc
)并使用它。
mysqld
或MySQL客户,运行configure
,使用--with-debug
选项,然后重新编译并且链接你客户程序到新的客户库。见G.2 调试一个MySQL客户。 如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者