?? manual_installing.html
字號:
<li>屬于特定系統的選項可在本章特定系統的小節里找到。見<a HREF="manual_Installing.html#Source_install_system_issues">4.11 系統特定的問題</a>。</li>
</ul>
<h2><a NAME="Compilation_problems" HREF="manual_toc.html#Compilation_problems">4.8
編譯問題?</a></h2>
<p>所有<strong>MySQL</strong>程序在Solaris上使用<code>gcc</code>編譯并且沒有任何警告。在其他系統上,由于系統包含文件的差別可能會發生警告。對于使用MIT-pthreads時發生的警告,見<a HREF="manual_Installing.html#MIT-pthreads">4.9 MIT-pthreads 注意事項</a>。其他問題,檢查下面的表。
</p>
<p>許多問題的解決方案涉及重新配置。如果你確實需要重新配置,注意下列事項:
<a NAME="IDX52"></a> <a NAME="IDX53"></a>
<ul>
<li>如果<code>configure</code>在它已經被運行了以后運行,它可以使用先前收集的信息。這個信息被存儲在<tt>“config.cache”</tt>里面。當<code>configure</code>啟動時,它尋找該文件而且如果它存在,假定信息仍然是正確的,讀入它的內容。當你重新配置時,該假設是無效的。
</li>
<li>每次你運行<code>configure</code>時候,你必須運行<code>make</code>再重新編譯。然而,
你可能想要把先前構造的老的目標文件刪除,因為他們使用不同的配置選項被編譯。
</li>
</ul>
<p>為了防止使用舊的配置信息或目標文件,在重新運行<code>configure</code>前運行這些命令:
</p>
<pre>
shell>rm config.cache
shell>make clean
</pre>
<p>另外,你可以運行<code>make distclean</code>。 </p>
<p>下表描述了一些最常發生的編譯<strong>MySQL</strong>的問題:
<ul>
<li><a NAME="IDX58"></a>如果在編譯<tt>“sql_yacc.cc”</tt>時,你得到如下的一個錯誤,你可能是存儲器或交換空間溢出:
<pre>Internal compiler error: program cc1plus got fatal signal 11
或
Out of virtual memory
或
Virtual memory exhausted
</pre>
<p>該問題是<code>gcc</code>要求大量的內存編譯<tt>帶有嵌入函數(inline
function)的“sql_yacc.cc”</tt>。試試以<code>--with-low-memory</code>選項運行<code>configure</code>:
</p>
<pre>
shell>./configure -- with-low-memory</pre>
<p>如果你正在使用<code>gcc</code>,該選項使得<code>將-fno-inline</code>加到編譯行,如果你正在使用其他的編譯器,則加入<code>-O0</code>。你應該試一試<code>--with-low-memory</code>選項,即使你有特別多的存儲器和交換空間,而你認為不能可能運行得溢出。這個問題甚至在很慷慨的硬件配置的系統上出現,通常用<code>--with-low-memory</code>選項修正它。
</p>
</li>
<li>缺省地,<code>configure</code>挑選<code>c++</code>作為編譯器名字并用<code>-lg++</code>選項的GNU<code>
c++</code>鏈接。如果你正在使用<code>gcc</code>,這個特性在配置期間導致如下問題:
<a NAME="IDX59"></a> <pre>configure: error: installation or configuration problem:
C++ compiler cannot create executables.
</pre>
<p><a NAME="IDX60"></a><a NAME="IDX61"></a>你可能也在編譯期間看到<code>g++</code>、<code>libg++</code>或<code>libstdc++</code>相關的問題。這些問題的一個原因是你可能沒有<code>g++</code>,或你可能有<code>g++</code>但無<code>libg++</code>或<code>libstdc++</code>。看一下<tt>“config.log”</tt>文件。它應該包含你的c++編譯器不能工作的準確原因!為了解決這些問題,你可以使用<code>gcc</code>作為你的C++編譯器。試試設置環境變量<code>CXX</code>為<code>"gcc
-O3"</code>。例如: <a NAME="IDX62"></a> <a NAME="IDX63"></a> </p>
<pre>
shell>CXX="gcc -O3" ./configure</pre>
<p>它能工作,因為<code>gcc</code>象<code>g++</code>一樣編譯C++源代碼,但缺省地它不鏈接<code>libg++</code>或<code>libstdc++</code>。解決這些問題的其他方法當然是安裝<code>g++</code>、<code>libg++</code>和<code>libstdc++</code>。
</p>
</li>
<li>如果你的編譯以下面任何錯誤而失敗,你必須升級<code>make</code>版本到GNU<code>make</code>:
<pre>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
</pre>
<p><a NAME="IDX64"></a><a NAME="IDX67"></a>Solaris和FreeBSD已知<code>make</code>程序有問題。GNU
<code>make</code>版本3.75已知能工作。 <a NAME="IDX68"></a> <a NAME="IDX69"></a> <a NAME="IDX70"></a> <a NAME="IDX71"></a> <a NAME="IDX72"></a> <a NAME="IDX73"></a> <a NAME="IDX74"></a> <a NAME="IDX75"></a> </p>
</li>
<li>如果你想要定義你的C或C++編譯器所使用的標志,把標志加到<code>CFLAGS</code>和<code>CXXFLAGS</code>環境變量中即可。你也能使用<code>CC</code>和<code>CXX</code>來指定編譯器名字。例如:
<pre>
shell>CC=gcc
shell>CFLAGS=-O6
shell>CXX=gcc
shell>CXXFLAGS=-O6
shell>export CC CFLAGS CXX CXXFLAGS
</pre>
<p>對于已經知道在不同系統上有用的標志定義列表,見<a HREF="manual_Installing.html#TcX_binaries">4.14 TcX 二進制代碼</a>。 </p>
</li>
<li>如果你得到象如下的一條錯誤消息,你需要升級你的<code>gcc</code>編譯器:
<pre>
client/libmysql.c:273: parse error brfore '__attribute__'</pre>
<p><code>gcc</code>2.8.1已知可以工作,但是我們推薦使用<code>egcs</code>1.0.3a或更新。
</p>
</li>
<li>如果你在編譯<code>mysqld</code>時顯示例如下面的那些錯誤, <code>configure</code>沒有正確地檢測傳到<code>accept()</code>、<code>getsockname()</code>或<code>getpeername()</code>最后參數的類型:
<pre>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);
</pre>
<p>為了修正它,編輯<tt>“config.h”</tt>文件(它由<code>configure</code>生成)。尋找這些行:
</p>
<pre>/* Define as the base type of the last arg to accept */
#define SOCKET_SIZE_TYPE XXX
</pre>
<p>更改<code>XXX</code>為<code>size_t</code>或<code>int</code>,這取決于你的操作系統。(注意:你每次運行<code>configure</code>都必須這樣做,因為<code>configure</code>重新生成<tt>“config.h”</tt>。)</p>
</li>
<li><tt>“sql_yacc.cc”</tt>文件由<tt>“sql_yacc.yy”</tt>生成。通常構造過程不需要創造<tt>“sql_yacc.cc”</tt>,因為<strong>MySQL</strong>有一個已經生成的拷貝,然而,如果你確實需要再創建它,你可能碰到這個錯誤:
<pre>"sql_yacc.yy", line xxx fatal: default action causes potential...
</pre>
<p>這是一個你的<code>yacc</code>版本不完善的跡象。你可能需要安裝<code>bison</code>(GNU
版本<code>yacc</code>)并使用它。 </p>
</li>
<li>如果你需要調試<code>mysqld</code>或<strong>MySQL</strong>客戶,運行<code>configure</code>,使用<code>--with-debug</code>選項,然后重新編譯并且鏈接你客戶程序到新的客戶庫。見<a HREF="manual_Porting.html#Debugging_client">G.2 調試一個MySQL客戶</a>。 </li>
</ul>
<h2><a NAME="MIT-pthreads" HREF="manual_toc.html#MIT-pthreads">4.9 MIT-pthreads注意事項</a></h2>
<p>這節描述在使用 MIT-pthreads 所涉及的一些問題。 </p>
<p>注意:在Linux上,你應該不使用MIT-pthreads而是安裝LinuxThreads!見<a HREF="manual_Installing.html#Linux">4.11.5 Linux 注意事項(所有的Linux 版本)</a>。
</p>
<p>如果你的系統不提供原生的線程支持,你將需要使用MIT-pthreads包構造<strong>MySQL</strong>。這包括大多數FreeBSD系統、SunOS
4.x 、Solaris 2.4和更早版本及其他,見<a HREF="manual_Installing.html#Which_OS">4.2
MySQL 支持的操作系統</a>。
<ul>
<li>在大多數系統上,你能通過使用<code>configure</code>,用<code>--with-mit-threads</code>選項來強迫運行MIT-pthreads:
<pre>
shell> ./configure -- with-mit-threads</pre>
<p>當使用MIT-pthreads時,不支持在一個非源代碼目錄構造,因為我們想要使我們對代碼的改變減到最小。
</p>
</li>
<li>MIT-pthreads不支持用于實現Unix套接字<code>的AF_UNIX</code>協議。這意味著如果你使用MIT-pthreads進行編譯,所有的鏈接必須使用TCP/IP進行(它有點慢)。如果在構造<strong>MySQL</strong>后,你發現你不能與本地的服務器連接,很可能是客戶程序正在試圖用缺省的Unix套接字與<code>localhost</code>連接。使用主機選擇(<code>-h</code>或<code>--host</code>)明確地指定本地的主機名字,嘗試做一個TCP/IP連接<code>到mysql</code>。
</li>
<li>決定是否使用MIT-pthreads的檢查僅在處理服務器代碼的配置過程期間發生。如果已經用<code>--without-server</code>配置了分發并只構造客戶代碼,客戶將不知道MIT-pthreads是否正在被使用并且是否使用缺省的Unix套接字連接。因為Unix套接字不能在MIT-pthreads下面工作,這意味著當你運行客戶程序時,你將需要使用<code>-h</code>或<code>--host</code>。
</li>
<li>當使用MIT-pthreads編譯<strong>MySQL</strong>時,因為性能原因,系統鎖定缺省為禁止使用。你可以用<code>--use-locking</code>選項告訴服務器使用系統鎖定。
</li>
<li>有時pthread<code>bind()</code>命令不能綁定一個套接字但沒有任何錯誤消息(至少在Solaris上),結果是所有到服務器的連接均失敗。例如:
<pre>shell> mysqladmin version
mysqladmin: connect to server at '' failed;
error: 'Can't connect to mysql server on localhost (146)'
</pre>
<p>解決它的方法是殺死<code>mysqld</code>服務器并且重啟它。這只有當我們強迫服務器停止并馬上進行重啟時在發生。
</p>
</li>
<li>使用MIT-pthreads,<code>sleep()</code>系統調用不是可中斷的<code>SIGINT</code>(break)。這只有在你運行<code>mysqladmin
--sleep</code>時才能注意到。你在中斷起作用并且進程停止之前必須等待<code>sleep()</code>終止。
</li>
<li>當鏈接時,你可能會收到這樣的警告消息(至少在Solaris上);他們可以被忽視:
<pre>ld: warning: symbol `_iob' has differing sizes:
(file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
file /usr/lib/libc.so value=0x140);
/my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
ld: warning: symbol `__iob' has differing sizes:
(file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
file /usr/lib/libc.so value=0x140);
/my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
</pre>
</li>
<li>一些其他的警告也可被忽略: <pre>implicit declaration of function `int strtoll(...)'
implicit declaration of function `int strtoul(...)'
</pre>
</li>
<li>我們還沒有讓<code>readline</code>可在MIT-pthreads上工作。(這不需要,但是可能某些人有興趣。)</li>
</ul>
<h2><a NAME="Perl_support" HREF="manual_toc.html#Perl_support">4.10 Perl 安裝說明</a></h2>
<h3><a NAME="Perl_installation" HREF="manual_toc.html#Perl_installation">4.10.1 在Unix上安裝Perl</a></h3>
<p>Perl對<strong>MySQL</strong>的支持借助<code>DBI</code>/<code>DBD</code>客戶接口而提供。見<a HREF="manual_Clients.html#Perl">20.5 MySQL Perl API</a>。Perl<code> DBD</code>/<code>DBI</code>客戶代碼要求Perl
5.004或以后版本。如果你有Perl的一個更舊的版本,接口<em>將不能工作</em>。
</p>
<p><strong>MySQL</strong> Perl支持也要求你安裝了<strong>MySQL</strong>客戶編程支持。如果你從RPM文件安裝<strong>MySQL</strong>,客戶程序在客戶RPM中,但是客戶編程支持在開發者RPM。確定你安裝了后一個RPM
。 </p>
<p>對于版本3.22.8,Perl支持是與主要<strong>MySQL</strong>發行版本單獨分發。如果你想要安裝Perl支持,你需要的文件能從<a HREF="http://www.mysql.com/Contrib">http://www.mysql.com/Contrib</a>獲得。 </p>
<p>Perl 分發以壓縮的<code>tar</code>檔案提供,并且有一個類似<tt>“MODULE-VERSION.tar.gz”</tt>的名字,這里<code>MODULE</code>是模塊名字并且<code>VERSION</code>是版本號。你應該得到<code>Data-Dumper</code>、DBI和<code>Msql-Mysql-modules</code>分發并按此次序安裝他們。安裝過程顯示出在下面,顯示的例子針對<code>Data-Dumper</code>模塊,
但是所有3個過程是相同的。
<ol>
<li>解包分發到當前目錄: <pre>
shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -</pre>
<p>這個命令創建的一個名為<tt>“Data-Dumper-VERSION”</tt>的目錄。 </p>
</li>
<li>進入解包分發的頂級目錄: <pre>shell> cd Data-Dumper-VERSION</pre>
</li>
<li>構造分發并且編譯所有東西: <pre>shell> perl Makefile.PL
shell> make
shell> make test
shell> make install
</pre>
</li>
</ol>
<p><code>make test</code>命令很重要,因為它驗證模塊正在工作。注意:在你<code>Msql-Mysql-modules</code>安裝期間運行該命令試驗接
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -