编译MySql时Linux thread not found问题与解决
今天碰到一师兄在FC6系统中从源码安装MySql时遇到问题:
#./configure --prefix=/usr/local/mysql
…
…
checking "LinuxThreads"... "Not found"
configure: error: This is a linux system and Linuxthreads was not found. On linux Linuxthreads should be used. Please install Linuxthreads (or a new glibc) and try again. See the Installation chapter in the Reference Manual for more information.
在网上随便搜一下关键字“Linuxthreads was not found”可以找到很多相关的帖子,但大多都没有提供完整解决方案。
下面来分析一下上面的出错情况,并就此提供一个解决方案。
从上面的出错可以很明显的看出是说系统缺少线程库。
没有线程,Linux可以运行吗?呵呵,那当然不行。
既然没有linuxthread那现在用的是什么呢?
答案是NPTL。
NPTL即native posix thread library与 LinuxThreads 相比,NPTL 具有很多优点(将在本文最后介绍)。
作为去除过时的 LinuxThreads 库的一个步骤,在 Fedora Core 5 test1 中编译和连接的代码现在自动使用 NPTL 头文件和库。
在过去的版本中,从 Red Hat Linux 9 开始,默认的线程模型是LnuxThreads,因为接口是最通用的。NPTL 接口的优点在于,线程取消的处理更快 (使用 -fexception 参数时,即使在 C 代码中)。现在附加的接口也已可用,不需要特殊的编译器和连接器参数。
下面言归正转,怎样解决?
可以修改程序去支持NPTL,也可以在编译时加上对原有thread库的支持。
我选择了后者,这样可以不动MySql的源代码。(安全一点,嘻嘻)
在mysql手册中搜关键字thread,可以查到在
Chapter 2. Installing and Upgrading MySQL
2.8.5. MIT-pthreads Notes
If your system does not provide native thread support, you should build MySQL using the MIT-pthreads package. This includes older FreeBSD systems, SunOS 4.x, Solaris 2.4 and earlier, and some others. See Section 2.1.1, “Operating Systems Supported by MySQL”.
Beginning with MySQL 4.0.2, MIT-pthreads is no longer part of the source distribution. If you require this package, you need to download it separately from http://www.mysql.com/Downloads/C ... _beta6-mysql.tar.gz
After downloading, extract this source archive into the top level of the MySQL source directory. It creates a new subdirectory named mit-pthreads.
从上可以看出:只要下到mit-thread源码就可以了。但不知道为什么官方网站上已经没有下了的了(我又找了一个官网的镜像还是没有,郁闷ing)。再仔细看一下上面,只是将线程源码放到MySql源码目录的根目录下以mit-pthreads命名的目录。官方没有自己去下一个也是一样的,只要解压后放到上述位置就可了。
于是去下了一个pthread源码包,解压放到相应位置。
再
#./configure --prefix=/usr/local/mysql --with-mit-threads
就顺利通过了。