Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->CGI ->正文

perl与Mysql连接

来源:Linuxdby.com 作者:Webmaster 时间:2007-04-28 点击: [收藏] [投稿]

接下来,在Msql-Mysql-modules分发所在目录下,使用刚才创建的Perl来创建同样包括一个静态链接的PerlDBD::mysql的另一个Perl:

shell> perl Makefile.PL LINKTYPE=static
shell> make
shell> make install
shell> make perl
最后, 你应该安装这个新的Perl。而且,make perl的输出指出使用的命令。

系统特定的问题
下面的章节说明在从源代码分发安装MySQL时,发生在特定的系统上并已观察到的一些问题。

Solaris注意事项
在Solaris上,甚至在你解开MySQL分发以前,你可能陷入困境!Solaris tar不能处理长文件名字,因此你在打开MySQL时,可能看到这样的一个错误:

x mysql-3.22.12-beta/bench/Results/ATIS-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase, 0 bytes, 0 tape blocks
tar: directory checksum error
在这种情况下,你必须使用 GNU tar(gtar) 打开分发。你能在http://www.mysql.com/Downloads/找到为Solaris的一个预编译的拷贝。

Sun的原生线程只工作在Solaris 2.5和更高版本上。对于2.4和更早的版本,MySQL将自动地使用 MIT-pthreads 。见4.9 MIT-pthreads 注意事项。

如果你从配置得到下列错误:

checking for restartable system calls… configure: error can not run test
programs while cross compiling
这意味着你的编译器安装有些问题!在这种情况下,你应该升级编译器到一个更新的版本。你也可以把下列行插入到config.cache文件来解决这个问题:

ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}
如果你在一个SPARC上使用Solaris,推荐的编译器是egcs1.1.2 或更新。你能在http://egcs.cygnus.com/找到它。注意:egs1.1.1 和gcc2.8.1 不能在 SPARC 上可靠地工作!

当使用时egcs1.1.2时,推荐的configure命令行是:

shell> CC=gcc CFLAGS="-O6"
CXX=gcc CXXFLAGS="-O6 -felide-constructors -fno-exceptions -fno-rtti"
./configure --prefix=/usr/local/mysql --with-low-memory
如果你有Sun Workshop 4.2 编译器,你能这样运行configure:

CC=cc CFLAGS="-xstrconst -Xa -xO4 -native -mt" CXX=CC CXXFLAGS="-xO4 -native -noex -mt" ./configure --prefix=/usr/local/mysql

shell> CC=cc CFLAGS="-Xa -fast -xO4 -native -xstrconst -mt"
CXX=CC CXXFLAGS="-noex -XO4 -mt"
./configure
你也可以编辑configure脚本改变该行:
#if !defined(__STDC__) || __STDC__ != 1
为:
#if !defined(__STDC__)
如果你使用-Xc选项打开__STDC__,Sun编译器不能用 Solaris 的“pthread.h”头文件编译。这是Sun的一个bug。

如果mysqld在运行时发出显示在下面的错误消息,你已经尝试用Sun编译器编译MySQL,没有启用多线程选择(-mt):

libc internal error: _rmutex_unlock: rmutex not held
增加-mt到CFLAGS和CXXFLAGS并且再试一试。

如果你在用gcc编译MySQL时得到下列错误,它意味着你的gcc没有对你的Solaris版本进行配置!

shell> gcc -O3 -g -O2 -DDBUG_OFF -o thr_alarm …
./thr_alarm.c: In function `signal_hand':
./thr_alarm.c:556: too many arguments to function `sigwait'
在这种情况下正确的做法是得到最新版本的egcs,并且用你当前的gcc编译器编译它!至少对于 Solaris 2.5,几乎所有的gcc二进制版本都有旧的、不可用的包含文件,将破怀使用线程的所有程序的文件(并且可能是其他的程序)!

Solaris不提供所有系统库的静态版本(libpthreads和libdl),所以你不能用--static编译MySQL。如果你尝试这样做,你将得到错误:

ld: fatal: library -ldl: not found
如果太多进程试图很快地连接mysqld,你将在MySQL日志文件中看见这个错误:

Error in accept: Protocol error
你可以试着用--set-variable back_log=50选项启动服务器作为它的一个解决办法。

如果你正在链接你自己的MySQL客户,当你试着执行它时,你可能得到下列错误:

ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such file or directory
这个问题能用下列方法之一避免:

用下列标志链接客户(而不是-Lpath): -Wl,r/full-path-to-libmysqlclient.so。
拷贝libmysqclient.so到“/usr/lib”。
在运行你的客户程序前,把libmysqlclient.so所在目录的路径名加到LD_RUN_PATH的环境变量中。
4.11.2 Solaris 2.7 注意事项
通常你能在 Solaris 2.7 上使用 Solaris 2.6 二进制代码。大多数Solaris 2.6 的问题也适用于Solaris 2.7。

注意:MySQL3.23.4 和更高版本应该能自动检测 Solaris 2.7 并且启用下列问题的解决办法!

Solaris 2.7 在包括文件中有一些bug,在使用gcc时,你可以看见下列错误:

/usr/include/widec.h:42: warning: `getwc' redefined
/usr/include/wchar.h:326: warning: this is the location of the previous
definition
如果出现这种情况,你可以做下列事情解决这个问题:

拷贝/usr/include/widec.h到…/lib/gcc-lib/os/gcc-version/include并且改变第41行:

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:使用Perl编写CGI时需要注意的几个问题   下一篇:如何在win98/NT上添加perl语言的各种模块

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号