Chinaunix首页 | 论坛 | 博客
  • 博客访问: 850683
  • 博文数量: 436
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -103
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-01 09:48
个人简介

爱生活,爱IT

文章分类

全部博文(436)

文章存档

2015年(1)

2014年(2)

2013年(6)

2011年(39)

2010年(176)

2009年(30)

2008年(28)

2007年(54)

2006年(91)

2005年(9)

分类: Mysql/postgreSQL

2009-11-09 17:15:44

服务器:DELL T710 (-Intel(R) Quad Core E5506 Xeon(R) CPU, 2.13GHz, 4M Cache, 4.86 GT/s QPI)
OS: Slackware 12.x
MYSQL: 4.0.17
 
故障:编译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.
 
看來 MySQL 4.0 不支援新核心使用了 NTPL 這種新的線程,最後用了這個方法解決:

# cp /usr/include/pthread.h /usr/include/pthread.h.bak
# echo ‘/* Linuxthreads */’ >> /usr/include/pthread.h
然後重新編譯及加入 –with-pthread 及 –with-named-thread-lib 兩個參數:
# ./configure –prefix=/usr/local/mysql –with-pthread –with-named-thread-lib=-lpthread
# make && make install
這樣就可以正常編譯及安裝 MySQL 4.0 了
 
以上解决,由我同事搞定的。在此仅当收藏和推荐!
 
BTW:
在网上随便搜一下关键字“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与 LinuxThreads 相比的优点[/b]
     NPTL 没有使用管理线程。管理线程的一些需求,例如向作为进程一部分的所有线程发送终止信号,是并不需要的;因为内核本身就可以实现这些功能。内核还会处理每个线程堆栈所使用的内存的回收工作。它甚至还通过在清除父线程之前进行等待,从而实现对所有线程结束的管理,这样可以避免僵尸进程的问题。
由于 NPTL 没有使用管理线程,因此其线程模型在 NUMA 和 SMP 系统上具有更好的可伸缩性和同步机制。
     使用 NPTL 线程库与新内核实现,就可以避免使用信号来对线程进行同步了。为了这个目的,NPTL 引入了一种名为 futex 的新机制。futex 在共享内存区域上进行工作,因此可以在进程之间进行共享,这样就可以提供进程间 POSIX 同步机制。我们也可以在进程之间共享一个 futex。这种行为使得进程间同步成为可能。实际上,NPTL 包含了一个 PTHREAD_PROCESS_SHARED 宏,使得开发人员可以让用户级进程在不同进程的线程之间共享互斥锁。
由于 NPTL 是 POSIX 兼容的,因此它对信号的处理是按照每进程的原则进行的;getpid() 会为所有的线程返回相同的进程 ID。例如,如果发送了 SIGSTOP 信号,那么整个进程都会停止;使用 LinuxThreads,只有接收到这个信号的线程才会停止。这样可以在基于 NPTL 的应用程序上更好地利用调试器,例如 GDB。
由于在 NPTL 中所有线程都具有一个父进程,因此对父进程汇报的资源使用情况(例如 CPU 和内存百分比)都是对整个进程进行统计的,而不是对一个线程进行统计的。
NPTL 线程库所引入的一个实现特性是对 ABI(应用程序二进制接口)的支持。这帮助实现了与 LinuxThreads 的向后兼容性。
 
 
 

var alimama_pid= "mm_14656179_0_0"; var alimama_uniteid= "10050490"; var alimama_type= "1000"; var alimama_mode= "42"; var alimama_titlecolor= "0000FF"; var alimama_bgcolor="FFFFFF"; var alimama_bordercolor="E6E6E6"; var alimama_shopcat="1048"; var alimama_pid= "mm_14656179_0_0"; var alimama_uniteid= "10839504"; var alimama_type= "1000"; var alimama_mode= "42"; var alimama_titlecolor= "0000FF"; var alimama_bgcolor="FFFFFF"; var alimama_bordercolor="E6E6E6"; var alimama_shopcat="1048";

精典收藏:SQL Server 2008 集群+SAN集成方案:
  • 精典收藏:中小型IT机房UPS不间断电力解决方案:
  • 阅读(968) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~