您的位置:网站主页> Mysql教程 > MySQL编译疑难问题讲解

MySQL编译疑难问题讲解

时间:2018-06-04 04:37:02   编辑:一切随缘   文章来源:php教程网 已阅读:138 次

编程入门教程[www.ask186.com]网站介绍 

    编程入门教程主要涉及WEB开发领域,主要为广大WEB开发人员提供最新的WEB开发资讯信息,包含php教程mysql教程php面试题在线调色板php学习以及常用( Amazon ApiGoogle Api)等API、爱问资源共享HTML转JS不显示xml...[详细]
广告投放: 编程入门教程:www.ask186.com 电话:15818865556

  MySQL编译疑难问题讲解

  所有MySQL程序在Solaris或Linux上使用gcc编译并且没有任何警告。在其它系统上,由于系统包含文件的差别可能会发生警告。对于使用MIT-pthreads时发生的警告。其它问题,检查下面的表。

  许多问题的解决方案涉及重新配置。如果你确实需要重新配置,注意下列事项:

  如果configure在它已经被运行了以后运行,它可以使用先前收集的信息。这个信息存储在“config.cache”里面。当configure启动时,它寻找该文件而且如果它存在,假定信息仍然是正确的,读入它的内容。当你重新配置时,该假设无效。

  每次运行configure的时候,必须运行make再重新编译。然而, 你可能想要把先前构造的老的目标文件删除,因为它们使用不同的配置选项编译而成。

  为了防止使用旧的配置信息或目标文件,重新运行configure前运行这些命令:

  shell> rm config.cache

  shell> make clean

  另外,你可以运行make distclean。

  下表描述了一些最常发生的编译MySQL的问题:

  如果在编译“sql_yacc.cc”时,遇到如下错误,可能是存储器或交换空间溢出:

  · 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++。然而,我们建议不要在MySQL中使用libg++或libstdc++,因为只会增加mysqld二进制空间而不会带来任何好处。部分版本的库在过去曾经给用户带来一些奇怪的问题。

  · 如果你的编译以下面任何错误而失败,必须升级make版本到GNUmake:

  · making all in mit-pthreads

  · 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能工作。

  · 如果你想要定义C或C++编译器所使用的标志,把标志加到CFLAGS和CXXFLAGS环境变量中即可。也可以使用CC和CXX来指定编译器名字。例如:

  · shell> CC=gcc

  · shell> CFLAGS=-O3

  · shell> CXX=gcc

  · shell> CXXFLAGS=-O3

  · shell> export CC CFLAGS CXX CXXFLAGS

  · 如果你遇到象如下的一条错误消息,则需要升级gcc编译器:

  · client/libmysql.c:273: parse error before `__attribute__'

  gcc2.8.1已知可以工作,但是我们推荐使用gcc 2.95.2或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.cc”文件由“sql_yacc.yy”生成。通常构造过程不需要创造“sql_yacc.cc”,因为MySQL有一个已经生成的拷贝,然而,如果你确实需要再创建它,可能会碰到这个错误:

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

  这是一个yacc版本不完善的迹象。你可能需要安装bison(GNU的yacc)并使用它。

  · 在Debian Linux 3.0上, 如果你编译的MySQL 5.1要支持Berkeley DB,需要安装gawk代替默认的mawk。

  · 如果你需要调试mysqld或MySQL客户端,运行configure,使用--with-debug选项,然后重新编译并且将客户端程序链接到新的客户端库。

  · 如果你在Linux(例如,SuSE Linux 8.1或Red Hat Linux 7.3)下遇到类似下面的编译错误:

  · libmysql.c:1329: warning: passing arg 5 of `gethostbyname_r' from

  · incompatible pointer type

  · libmysql.c:1329: too few arguments to function `gethostbyname_r'

  · libmysql.c:1329: warning: assignment makes pointer from integer

  · without a cast

  · make[2]: *** [libmysql.lo] Error 1

  默认情况,configure脚本试图使用g++ GNU C++编译器来确定正确的参数。如果未安装g++,将会产生错误的结果。有两种方法可以解决该问题:

  o 确保安装了GNU C++ g++。在某些Linux分发版上,需要安装的软件包叫做gpp;在其它分发版上名为gcc-c++。

  o 使用gcc作为C++ 编译器,将CXX环境变量设置为gcc:

  o export CXX="gcc"

  请注意之后需要再次运行configure。

  • 上一篇:
  • 下一篇:

本文地址:http://www.ask186.com/content/article/mysql/31964.html(转载请保留)

相关关键词搜索:MySQL,编译,疑难,问题,讲解

发表评论
      
* 以上用户言论只代表其个人观点,不代表www.ask186.com网站的观点或立场
推荐文档更多
编程入门教程 | PHP教程 | Mysql教程 | Apache教程 | 最新文章 | PHP面试题| 网站地图 | Google地图 | Baidu地图 | 在线WEB论坛| 中纪委反腐最新消息

WEB技术QQ交流群:151963186 站长Q号:547214413
版权所有者:编程入门教程 地址:云南省文山州砚山县盘龙乡 滇ICP备12002707号-1
特别声明:本站内容仅供参考,不作为设计及确切依据!想了解更多,可立即进入Bbs提问