﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-DreamAngel-随笔分类-linux</title><link>http://www.blogjava.net/DreamAngel/category/39359.html</link><description>如果你希望成功，以恒心为良友，以经验为参谋，以小心为兄弟，以希望为哨兵。</description><language>zh-cn</language><lastBuildDate>Sun, 09 Aug 2009 19:46:26 GMT</lastBuildDate><pubDate>Sun, 09 Aug 2009 19:46:26 GMT</pubDate><ttl>60</ttl><item><title>ubuntu下gcc的安装与使用</title><link>http://www.blogjava.net/DreamAngel/archive/2009/08/09/290408.html</link><dc:creator>飞翔天使</dc:creator><author>飞翔天使</author><pubDate>Sun, 09 Aug 2009 02:03:00 GMT</pubDate><guid>http://www.blogjava.net/DreamAngel/archive/2009/08/09/290408.html</guid><wfw:comment>http://www.blogjava.net/DreamAngel/comments/290408.html</wfw:comment><comments>http://www.blogjava.net/DreamAngel/archive/2009/08/09/290408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DreamAngel/comments/commentRss/290408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DreamAngel/services/trackbacks/290408.html</trackback:ping><description><![CDATA[<h2><span class="mw-headline">准备工作 </span></h2>
<p>如果你还没装编译环境或自己不确定装没装，不妨先执行</p>
<pre>sudo apt-get install build-essential</pre>
<p>如果你需要编译 Fortran 程序，那么还需要安装 <a title="Gcc Fortran Intro" href="http://wiki.ubuntu.org.cn/index.php?title=Gcc_Fortran_Intro&amp;variant=zh-cn">gfortran(或 g77)</a></p>
<pre>sudo apt-get install gfortran</pre>
<p>如果你已经了解一些 <a title="Vim" href="http://wiki.ubuntu.org.cn/index.php?title=Vim&amp;variant=zh-cn">vim</a> 的知识，而且想用它来编辑源代码，那么我们不妨装个完整版</p>
<pre>sudo apt-get install vim-full</pre>
<p>如果你不了解vim，选择gedit、kate或mousepad来编辑源代码就好了</p>
<p><strong>注意：</strong>本文可能会让你失望，如果你看完后有下列疑问的话：为什么要在终端输命令啊？ <strong style="color: black; background-color: #a0ffff">GCC</strong> 是什么东西，怎么在菜单中找不到？ <strong style="color: black; background-color: #a0ffff">GCC</strong> 不能有像 VC 那样的窗口吗？&#8230;&#8230; 那么你真正想要了解的可能是 anjuta，kdevelop，geany，code blocks，eclipse，neatbean 等 <a title="C Cpp IDE" href="http://wiki.ubuntu.org.cn/index.php?title=C_Cpp_IDE&amp;variant=zh-cn">IDE 集成开发环境</a>。即使在这种情况下，由于 <strong style="color: black; background-color: #a0ffff">GCC</strong> 是以上 IDE 的后台的编译器，本文仍值得你稍作了解。</p>
<p><a name=".E7.BC.96.E8.AF.91.E7.AE.80.E5.8D.95.E7.9A.84_C_.E7.A8.8B.E5.BA.8F"></a></p>
<h2><span class="mw-headline">编译简单的 C 程序 </span></h2>
<p>C 语言经典的入门例子是 <strong>Hello World</strong>，下面是一示例代码：</p>
<div dir="ltr" style="text-align: left">
<pre class="source-c"><span class="co2"><font color="#339933">#include &lt;stdio.h&gt;</font></span><br />
<span class="kw4"><font color="#993333">int</font></span><br />
main<span class="br0"><font color="#009900">(</font></span><span class="kw4"><font color="#993333">void</font></span><span class="br0"><font color="#009900">)</font></span><br />
<span class="br0"><font color="#009900">{</font></span><br />
<span class="kw3"><font color="#000066">printf</font></span><span class="br0"><font color="#009900">(</font></span><span class="st0"><font color="#ff0000">"Hello, world!</font><span class="es0"><strong><font color="#000099">\n</font></strong></span><font color="#ff0000">"</font></span><span class="br0"><font color="#009900">)</font></span>;<br />
<span class="kw1"><font color="#b1b100">return</font></span> <span class="nu0"><font color="#cc66cc">0</font></span>;<br />
<span class="br0"><font color="#009900">}</font></span></pre>
</div>
<p>我们假定该代码存为文件&#8216;hello.c&#8217;。要用 <strong><strong style="color: black; background-color: #a0ffff">gcc</strong></strong> 编译该文件，使用下面的命令：</p>
<pre>$ <strong style="color: black; background-color: #a0ffff">gcc</strong> -Wall hello.c -o hello</pre>
<p>该命令将文件&#8216;hello.c&#8217;中的代码编译为机器码并存储在可执行文件 &#8216;hello&#8217;中。机器码的文件名是通过 <strong>-o</strong> 选项指定的。该选项通常作为命令行中的最后一个参数。如果被省略，输出文件默认为 &#8216;a.out&#8217;。</p>
<p><strong>注意到</strong>如果当前目录中与可执行文件重名的文件已经存在，它将被复盖。</p>
<p>选项 <strong>-Wall</strong> 开启编译器几乎所有常用的警告──<strong>强烈建议你始终使用该选项</strong>。编译器有很多其他的警告选项，但 <strong>-Wall</strong> 是最常用的。默认情况下<strong style="color: black; background-color: #a0ffff">GCC</strong> 不会产生任何警告信息。当编写 C 或 C++ 程序时编译器警告非常有助于检测程序存在的问题。</p>
<p>本例中，编译器使用了 <em>-Wall</em> 选项而没产生任何警告，因为示例程序是完全合法的。</p>
<p>要运行该程序，输入可执行文件的路径如下：</p>
<pre>$ ./hello<br />
Hello, world!</pre>
<p>这将可执行文件载入内存，并使 CPU 开始执行其包含的指令。 路径 <strong>./</strong> 指代当前目录，因此 <strong>./hello</strong> 载入并执行当前目录下的可执行文件 &#8216;hello&#8217;。</p>
<p>点击<a class="external text" title="http://ubuntu:ubuntuftp@ftp.ubuntu.org.cn/home/dbzhang800/wiki/gcchowto1.avi" href="http://ubuntu:ubuntuftp@ftp.ubuntu.org.cn/home/dbzhang800/wiki/gcchowto1.avi" rel="nofollow">此处</a>下载本节的操作视频</p>
<p><a name=".E6.8D.95.E6.8D.89.E9.94.99.E8.AF.AF"></a></p>
<h2><span class="mw-headline">捕捉错误 </span></h2>
<p>如上所述，当用 C 或 C++ 编程时，编译器警告是非常重要的助手。为了说明这一点，下面的例子包含一个微妙的错误：为一个整数值错误地指定了一浮点数控制符&#8216;%f&#8217;。</p>
<div dir="ltr" style="text-align: left">
<pre class="source-c"><span class="co2"><font color="#339933">#include &lt;stdio.h&gt;</font></span><br />
<br />
<span class="kw4"><font color="#993333">int</font></span><br />
main <span class="br0"><font color="#009900">(</font></span><span class="kw4"><font color="#993333">void</font></span><span class="br0"><font color="#009900">)</font></span><br />
<span class="br0"><font color="#009900">{</font></span><br />
<span class="kw3"><font color="#000066">printf</font></span> <span class="br0"><font color="#009900">(</font></span><span class="st0"><font color="#ff0000">"Two plus two is %f</font><span class="es0"><strong><font color="#000099">\n</font></strong></span><font color="#ff0000">"</font></span>, <span class="nu0"><font color="#cc66cc">4</font></span><span class="br0"><font color="#009900">)</font></span>;<br />
<span class="kw1"><font color="#b1b100">return</font></span> <span class="nu0"><font color="#cc66cc">0</font></span>;<br />
<span class="br0"><font color="#009900">}</font></span></pre>
</div>
<p>一眼看去该错误并不明显，但是它可被编译器捕捉到，只要启用了警告选项 <strong>-Wall</strong>。</p>
<p>编译上面的程序&#8216;bad.c&#8217;，将得到如下的消息：</p>
<pre>$ <strong style="color: black; background-color: #a0ffff">gcc</strong> -Wall bad.c -o bad<br />
bad.c: In function 'main':<br />
bad.c:6: warning: double format, different type arg (arg 2)</pre>
<p>这表明文件 &#8216;bad.c&#8217;第 6 行中的格式字符串用法不正确。<strong style="color: black; background-color: #a0ffff">GCC</strong> 的消息总是具有下面的格式 <em>文件名:行号:消息</em>。编译器对错误与警告区别对待，前者将阻止编译，后者表明可能存在的问题但并不阻止程序编译。</p>
<p>本例中，对整数值来说，正确的格式控制符应该是 <strong>%d</strong>。</p>
<p>如果不启用 <strong>-Wall</strong>，程序表面看起来编译正常，但是会产生不正确的结果：</p>
<pre>$ <strong style="color: black; background-color: #a0ffff">gcc</strong> bad.c -o bad<br />
$ ./bad<br />
Two plus two is 2.585495</pre>
<p>显而易见，开发程序时不检查警告是非常危险的。如果有函数使用不当，将可能导致程序崩溃或产生错误的结果。开启编译器警告选项 <strong>-Wall</strong> 可捕捉 C 编程时的多数常见错误。</p>
<p><a name=".E7.BC.96.E8.AF.91.E5.A4.9A.E4.B8.AA.E6.BA.90.E6.96.87.E4.BB.B6"></a></p>
<h2><span class="mw-headline">编译多个源文件 </span></h2>
<p>一个源程序可以分成几个文件。这样便于编辑与理解，尤其是程序非常大的时候。这也使各部分独立编译成为可能。</p>
<p>下面的例子中我们将程序 <em>Hello World</em> 分割成 3 个文件：&#8216;main.c&#8217;，&#8216;hello_fn.c&#8217;和头文件&#8216;hello.h&#8217;。这是主程序&#8216;main.c&#8217;：</p>
<div dir="ltr" style="text-align: left">
<pre class="source-c"><span class="co2"><font color="#339933">#include "hello.h"</font></span><br />
<span class="kw4"><font color="#993333">int</font></span> <br />
main<span class="br0"><font color="#009900">(</font></span><span class="kw4"><font color="#993333">void</font></span><span class="br0"><font color="#009900">)</font></span><br />
<span class="br0"><font color="#009900">{</font></span><br />
hello <span class="br0"><font color="#009900">(</font></span><span class="st0"><font color="#ff0000">"world"</font></span><span class="br0"><font color="#009900">)</font></span>;<br />
<span class="kw1"><font color="#b1b100">return</font></span> <span class="nu0"><font color="#cc66cc">0</font></span>;<br />
<span class="br0"><font color="#009900">}</font></span></pre>
</div>
<p>在先前的例子&#8216;hello.c&#8217;中，我们调用的是库函数 <strong>printf</strong>，本例中我们用一个定义在文件&#8216;hello_fn.c&#8217;中的函数 <strong>hello</strong> 取代它。</p>
<p>主程序中包含有头文件&#8216;hello.h&#8217;，该头文件包含函数 <strong>hello</strong> 的声明。我们不需要在&#8216;main.c&#8217;文件中包含系统头文件&#8216;stdio.h&#8217;来声明函数 <strong>printf</strong>，因为&#8216;main.c&#8217;没有直接调用 <strong>printf</strong>。</p>
<p>文件&#8216;hello.h&#8217;中的声明只用了一行就指定了函数 <strong>hello</strong> 的原型。</p>
<div dir="ltr" style="text-align: left">
<pre class="source-c"><span class="kw4"><font color="#993333">void</font></span> hello <span class="br0"><font color="#009900">(</font></span><span class="kw4"><font color="#993333">const</font></span> <span class="kw4"><font color="#993333">char</font></span> <span class="sy0"><font color="#339933">*</font></span> name<span class="br0"><font color="#009900">)</font></span>;</pre>
</div>
<p>函数 <strong>hello</strong> 的定义在文件&#8216;hello_fn.c&#8217;中：</p>
<div dir="ltr" style="text-align: left">
<pre class="source-c"><span class="co2"><font color="#339933">#include &lt;stdio.h&gt;</font></span><br />
<span class="co2"><font color="#339933">#include "hello.h"</font></span><br />
<br />
<span class="kw4"><font color="#993333">void</font></span><br />
hello <span class="br0"><font color="#009900">(</font></span><span class="kw4"><font color="#993333">const</font></span> <span class="kw4"><font color="#993333">char</font></span> <span class="sy0"><font color="#339933">*</font></span> name<span class="br0"><font color="#009900">)</font></span><br />
<span class="br0"><font color="#009900">{</font></span><br />
<span class="kw3"><font color="#000066">printf</font></span> <span class="br0"><font color="#009900">(</font></span><span class="st0"><font color="#ff0000">"Hello, %s!</font><span class="es0"><strong><font color="#000099">\n</font></strong></span><font color="#ff0000">"</font></span>, name<span class="br0"><font color="#009900">)</font></span>;<br />
<span class="br0"><font color="#009900">}</font></span></pre>
</div>
<p>语句 <strong>#include "FILE.h"</strong> 与 <strong>#include &lt;FILE.h&gt;</strong> 有所不同：前者在搜索系统头文件目录之前将先在当前目录中搜索文件&#8216;FILE.h&#8217;，后者只搜索系统头文件而不查看当前目录。</p>
<p>要用<em><strong style="color: black; background-color: #a0ffff">gcc</strong></em>编译以上源文件，使用下面的命令：</p>
<pre>$ <strong style="color: black; background-color: #a0ffff">gcc</strong> -Wall main.c hello_fn.c -o newhello</pre>
<p>本例中，我们使用选项 <strong>-o</strong> 为可执行文件指定了一个不同的名字 <strong>newhello</strong>。注意到头文件&#8216;hello.h&#8217;并未在命令行中指定。源文件中的的 <strong>#include "hello.h"</strong> 指示符使得编译器自动将其包含到合适的位置。</p>
<p>要运行本程序，输入可执行文件的路径名：</p>
<pre>$ ./newhello<br />
Hello, world!</pre>
<p>源程序各部分被编译为单一的可执行文件，它与我们先前的例子产生的结果相同。</p>
<p>点击<a class="external text" title="http://ubuntu:ubuntuftp@ftp.ubuntu.org.cn/home/dbzhang800/wiki/gcchowto2.avi" href="http://ubuntu:ubuntuftp@ftp.ubuntu.org.cn/home/dbzhang800/wiki/gcchowto2.avi" rel="nofollow">此处</a>下载本节的操作视频</p>
<p><a name=".E7.AE.80.E5.8D.95.E7.9A.84_Makefile_.E6.96.87.E4.BB.B6"></a></p>
<h2><span class="mw-headline">简单的 Makefile 文件 </span></h2>
<p>为便于不熟悉 <strong>make</strong> 的读者理解，本节提供一个简单的用法示例。Make 凭借本身的优势，可在所有的 Unix 系统中被找到。要了解关于Gnu make 的更多信息，请参考 Richard M. Stallman 和 Roland McGrath 编写的 <em>GNU Make</em> 手册。</p>
<p>Make 从 <em>makefile</em>(默认是当前目录下的名为&#8216;Makefile&#8217;的文件)中读取项目的描述。makefile指定了一系列<em>目标</em>（比如可执行文件）和<em>依赖</em>（比如对象文件和源文件）的编译规则，其格式如下：</p>
<pre>目标： 依赖<br />
命令</pre>
<p>对每一个目标，make 检查其对应的依赖文件修改时间来确定该目标是否需要利用对应的命令重新建立。注意到，makefile 中<em>命令</em>行必须以单个的 <strong><font color="#0000ff">TAB</font></strong> 字符进行缩进，不能是空格。</p>
<p>GNU Make 包含许多默认的规则(参考<em>隐含</em>规则)来简化 makefile 的构建。比如说，它们指定&#8216;<strong>.o</strong>&#8217;文件可以通过编译&#8216;<strong>.c</strong>&#8217;文件得到，可执行文件可以通过将&#8216;<strong>.o</strong>&#8217;链接到一起获得。隐含规则通过被叫做<em>make变量</em>的东西所指定，比如 <strong>CC</strong>(C 语言编译器)和 <strong>CFLAGS</strong>(C程序的编译选项)；在makefile文件中它们通过独占一行的 <strong>变量=值</strong> 的形式被设置。对 <strong>C++</strong> ，其等价的变量是<strong>CXX</strong>和<strong>CXXFLAGS</strong>，而变量<strong>CPPFLAGS</strong>则是编译预处理选项。</p>
<p>现在我们为上一节的项目写一个简单的 makefile 文件：</p>
<pre>CC=<strong style="color: black; background-color: #a0ffff">gcc</strong><br />
CFLAGS=-Wall<br />
hello: hello.o hello_fn.o<br />
clean:<br />
rm -f hello hello.o hello_fn.o</pre>
<p>该文件可以这样来读：使用 C 语言编译器 <strong><strong style="color: black; background-color: #a0ffff">gcc</strong></strong>，和编译选项&#8216;-Wall&#8217;,从对象文件&#8216;hello.o&#8217;和&#8216;hello_fn.o&#8217;生成目标可执行文件 <strong>hello</strong>（文件&#8216;hello.o&#8217;和&#8216;hello_fn.o&#8217;通过隐含规则分别由&#8216;hello.c&#8217;和&#8216;hello_fn.c&#8217;生成）。目标<strong>clean</strong>没有依赖文件，它只是简单地移除所有编译生成的文件。<strong>rm</strong>命令的选项 &#8216;-f&#8217;(force) 抑制文件不存在时产生的错误消息。</p>
<p>要使用该 makefile 文件，输入 <strong>make</strong>。不加参数调用make时，makefile文件中的第一个目标被建立，从而生成可执行文件&#8216;hello&#8217;：</p>
<pre>$ make<br />
<strong style="color: black; background-color: #a0ffff">gcc</strong> -Wall -c -o hello.o hello.c<br />
<strong style="color: black; background-color: #a0ffff">gcc</strong> -Wall -c -o hello_fn.o hello_fn.c<br />
<strong style="color: black; background-color: #a0ffff">gcc</strong> hello.o hello_fn.o -o hello<br />
$ ./hello<br />
Hello, world!</pre>
<p>一个源文件被修改要重新生成可执行文件，简单地再次输入 <strong>make</strong> 即可。通过检查目标文件和依赖文件的时间戳，程序 make 可识别哪些文件已经修改并依据对应的规则更新其对应的目标文件：</p>
<pre>$ vim hello.c (打开编辑器修改一下文件)<br />
$ make<br />
<strong style="color: black; background-color: #a0ffff">gcc</strong> -Wall -c -o hello.o hello.c<br />
<strong style="color: black; background-color: #a0ffff">gcc</strong> hello.o hello_fn.o -o hello<br />
$ ./hello<br />
Hello, world!</pre>
<p>最后，我们移除 make 生成的文件，输入 make clean：</p>
<pre>$ make clean<br />
rm -f hello hello.o hello_fn.o</pre>
<p>一个专业的 makefile文件通常包含用于安装(make install)和测试(make check)等额外的目标。</p>
<p>本文中涉及到的例子都足够简单以至于可以完全不需要makefile，但是对任何大些的程序都使用 make 是很有必要的。</p>
<p><a name=".E9.93.BE.E6.8E.A5.E5.A4.96.E9.83.A8.E5.BA.93"></a></p>
<h2><span class="mw-headline">链接外部库 </span></h2>
<p>库是预编译的目标文件(object files)的集合，它们可被链接进程序。静态库以后缀为&#8216;.a&#8217;的特殊的<em>存档文件(archive file)</em>存储。</p>
<p>标准系统库可在目录 <strong>/usr/lib</strong> 与 <strong>/lib</strong> 中找到。比如，在类 Unix 系统中 C 语言的数学库一般存储为文件 <strong>/usr/lib/libm.a</strong>。该库中函数的原型声明在头文件 <strong>/usr/include/math.h</strong> 中。C 标准库本身存储为 <strong>/usr/lib/libc.a</strong>，它包含 ANSI/ISO C 标准指定的函数，比如&#8216;printf&#8217;。对每一个 C 程序来说，libc.a 都默认被链接。</p>
<p>下面的是一个调用数学库 <strong>libm.a</strong> 中 <strong>sin</strong> 函数的的例子，创建文件<strong>calc.c</strong>：</p>
<div dir="ltr" style="text-align: left">
<pre class="source-c"><span class="co2"><font color="#339933">#include &lt;math.h&gt;</font></span><br />
<span class="co2"><font color="#339933">#include &lt;stdio.h&gt;</font></span><br />
<br />
<span class="kw4"><font color="#993333">int</font></span><br />
main <span class="br0"><font color="#009900">(</font></span><span class="kw4"><font color="#993333">void</font></span><span class="br0"><font color="#009900">)</font></span><br />
<span class="br0"><font color="#009900">{</font></span><br />
<span class="kw4"><font color="#993333">double</font></span> x <span class="sy0"><font color="#339933">=</font></span> sin <span class="br0"><font color="#009900">(</font></span><span class="nu0"><font color="#cc66cc">2.0</font></span><span class="br0"><font color="#009900">)</font></span>;<br />
<span class="kw3"><font color="#000066">printf</font></span> <span class="br0"><font color="#009900">(</font></span><span class="st0"><font color="#ff0000">"The value of sin(2.0) is %f</font><span class="es0"><strong><font color="#000099">\n</font></strong></span><font color="#ff0000">"</font></span>, x<span class="br0"><font color="#009900">)</font></span>;<br />
<span class="kw1"><font color="#b1b100">return</font></span> <span class="nu0"><font color="#cc66cc">0</font></span>;<br />
<span class="br0"><font color="#009900">}</font></span></pre>
</div>
<p>尝试单独从该文件生成一个可执行文件将导致一个链接阶段的错误：</p>
<pre>$ <strong style="color: black; background-color: #a0ffff">gcc</strong> -Wall calc.c -o calc<br />
/tmp/ccbR6Ojm.o: In function 'main':<br />
/tmp/ccbR6Ojm.o(.text+0x19): undefined reference to &#8216;sin&#8217;</pre>
<p>函数 <strong>sin</strong>，未在本程序中定义也不在默认库&#8216;libc.a&#8217;中；除非被指定，编译器也不会链接&#8216;libm.a&#8217;。</p>
<p>为使编译器能将 <strong>sin</strong> 链接进主程序&#8216;calc.c&#8217;，我们需要提供数学库&#8216;libm.a&#8217;。一个容易想到但比较麻烦的做法是在命令行中显式地指定它：</p>
<pre>$ <strong style="color: black; background-color: #a0ffff">gcc</strong> -Wall calc.c /usr/lib/libm.a -o calc</pre>
<p>函数库&#8216;libm.a&#8217;包含所有数学函数的目标文件，比如<strong>sin</strong>,<strong>cos</strong>,<strong>exp</strong>,<strong>log</strong>及<strong>sqrt</strong>。链接器将搜索所有文件来找到包含 <strong>sin</strong> 的目标文件。</p>
<p>一旦包含 <strong>sin</strong> 的目标文件被找到，主程序就能被链接，一个完整的可执行文件就可生成了：</p>
<pre>$ ./calc<br />
The value of sin(2.0) is 0.909297</pre>
<p>可执行文件包含主程序的机器码以及函数库&#8216;libm.a&#8217;中 <strong>sin</strong> 对应的机器码。</p>
<p>为避免在命令行中指定长长的路径，编译器为链接函数库提供了快捷的选项&#8216;-l&#8217;。例如，下面的命令</p>
<pre>$ <strong style="color: black; background-color: #a0ffff">gcc</strong> -Wall calc.c -lm -o calc</pre>
<p>与我们上面指定库全路径&#8216;/usr/lib/libm.a&#8217;的命令等价。</p>
<p>一般来说，选项 <strong>-l</strong><em>NAME</em>使链接器尝试链接系统库目录中的函数库文件 <strong>lib</strong><em>NAME</em>.<strong>a</strong>。一个大型的程序通常要使用很多 <strong>-l</strong> 选项来指定要链接的数学库，图形库，网络库等。</p>
<p><a name=".E7.BC.96.E8.AF.91C.2B.2B.E4.B8.8EFortran"></a></p>
<h2><span class="mw-headline">编译C++与Fortran</span></h2>
<p><strong style="color: black; background-color: #a0ffff">GCC</strong> 是 GNU 编译器集合（GNU Compiler Collection）的首字母缩写词。GNU 编译器集合包含 C，C++，Objective-C，Fortran，Java 和 Ada 的前端以及这些语言对应的库（libstdc++，libgcj，&#8230;&#8230;）。</p>
<p>前面我们只涉及到 C 语言，那么如何用 <strong style="color: black; background-color: #a0ffff">gcc</strong> 编译其他语言呢？本节将简单介绍 C++ 和 Fortran 编译的例子。</p>
<p>首先我们尝试编译简单的 C++ 的经典程序 <strong>Hello world</strong>：</p>
<div dir="ltr" style="text-align: left">
<pre class="source-c"><span class="co2"><font color="#339933">#include &lt;iostream&gt;</font></span><br />
<span class="kw4"><font color="#993333">int</font></span> main<span class="br0"><font color="#009900">(</font></span><span class="kw4"><font color="#993333">int</font></span> argc,<span class="kw4"><font color="#993333">char</font></span> <span class="sy0"><font color="#339933">*</font></span>argv<font color="#009900"><span class="br0">[</span><span class="br0">]</span><span class="br0">)</span></font><br />
<span class="br0"><font color="#009900">{</font></span><br />
std<span class="sy0"><font color="#339933">::</font></span><span class="kw3"><font color="#000066">cout</font></span> &lt;&lt; <span class="st0"><font color="#ff0000">"hello, world</font><span class="es0"><strong><font color="#000099">\n</font></strong></span><font color="#ff0000">"</font></span>;<br />
<span class="kw1"><font color="#b1b100">return</font></span> <span class="nu0"><font color="#cc66cc">0</font></span>;<br />
<span class="br0"><font color="#009900">}</font></span></pre>
</div>
<p>将文件保存为&#8216;hello.cpp&#8217;，用 <strong style="color: black; background-color: #a0ffff">gcc</strong> 编译，结果如下：</p>
<pre>
<pre>$ <strong style="color: black; background-color: #a0ffff">gcc</strong> -Wall hello.cpp -o hello<br />
/tmp/cch6oUy9.o: In function `__static_initialization_and_destruction_0(int, int)':<br />
hello.cpp:(.text+0x23): undefined reference to `std::ios_base::Init::Init()'<br />
/tmp/cch6oUy9.o: In function `__tcf_0':<br />
hello.cpp:(.text+0x6c): undefined reference to `std::ios_base::Init::~Init()'<br />
/tmp/cch6oUy9.o: In function `main':<br />
hello.cpp:(.text+0x8e): undefined reference to `std::cout'<br />
hello.cpp:(.text+0x93): undefined reference to `std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::operator&lt;&lt;</pre>
<pre>&lt;std::char_traits&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, char const*)'<br />
/tmp/cch6oUy9.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'<br />
collect2: ld returned 1 exit status</pre>
</pre>
<p>出错了！！而且错误还很多，很难看懂，这可怎么办呢？在解释之前，我们先试试下面的命令：</p>
<pre>$ <strong style="color: black; background-color: #a0ffff">gcc</strong> -Wall hello.cpp -o hello -lstdc++</pre>
<p>噫，加上-lstdc++选项后，编译竟然通过了，而且没有任何警告。运行程序，结果如下：</p>
<pre>$ ./hello <br />
hello, world</pre>
<p>通过上节，我们可以知道，-lstdc++ 选项用来通知链接器链接静态库 libstdc++.a。而从字面上可以看出，libstdc++.a 是C++ 的标准库，这样一来，上面的问题我们就不难理解了──编译 C++ 程序，需要链接 C++ 的函数库 libstdc++.a。</p>
<p>编译 C 的时候我们不需要指定 C 的函数库，为什么 C++ 要指定呢？这是由于早期 <strong style="color: black; background-color: #a0ffff">gcc</strong> 是指 GNU 的 C 语言编译器（GNU C Compiler），随着 C++，Fortran 等语言的加入，<strong style="color: black; background-color: #a0ffff">gcc</strong>的含义才变化成了 GNU 编译器集合（GNU Compiler Collection）。C作为 <strong style="color: black; background-color: #a0ffff">gcc</strong> 的原生语言，故编译时不需额外的选项。</p>
<p>不过幸运的是，<strong style="color: black; background-color: #a0ffff">GCC</strong> 包含专门为 C++ 、Fortran 等语言的编译器前端。于是，上面的例子，我们可以直接用如下命令编译：</p>
<pre>$ g++ -Wall hello.cpp -o hello</pre>
<p><strong style="color: black; background-color: #a0ffff">GCC</strong> 的 C++ 前端是 g++，而 Fortran 的情况则有点复杂：在 <strong style="color: black; background-color: #a0ffff">gcc</strong>-4.0 版本之前，Fortran 前端是 g77，而<strong style="color: black; background-color: #a0ffff">gcc</strong>-4.0之后的版本对应的 Fortran 前端则改为 gfortran。下面我们先写一个简单的 Fortran 示例程序：</p>
<div dir="ltr" style="text-align: left">
<pre class="source-fortran"><span class="co1"><em><font color="#666666">C     Fortran 示例程序</font></em></span><br />
<span class="kw1"><font color="#b1b100">PROGRAM</font></span> HELLOWORLD<br />
WRITE<span class="br0"><font color="#009900">(</font></span><span class="sy0"><font color="#339933">*</font></span>,<span class="nu0"><font color="#cc66cc">10</font></span><span class="br0"><font color="#009900">)</font></span><br />
<span class="nu0"><font color="#cc66cc">10</font></span> FORMAT<span class="br0"><font color="#009900">(</font></span><span class="st0"><font color="#ff0000">'hello, world'</font></span><span class="br0"><font color="#009900">)</font></span><br />
<span class="kw1"><font color="#b1b100">END</font></span> <span class="kw1"><font color="#b1b100">PROGRAM</font></span> HELLOWORLD</pre>
</div>
<p>将文件保存&#8216;hello.f&#8217;，用 <strong style="color: black; background-color: #a0ffff">GCC</strong> 的 Fortran 前端编译运行该文件</p>
<pre>$ gfortran -Wall hello.f -o hello<br />
$ ./hello<br />
hello, world</pre>
<p>我们已经知道，直接用 <strong style="color: black; background-color: #a0ffff">gcc</strong> 来编译 C++ 时，需要链接 C++ 标准库，那么用 <strong style="color: black; background-color: #a0ffff">gcc</strong> 编译 Fortran时，命令该怎么写呢？</p>
<pre>$ <strong style="color: black; background-color: #a0ffff">gcc</strong> -Wall hello.f -o helloworld -lgfortran -lgfortranbegin</pre>
<p><strong>注意</strong>：上面这条命令与 gfortran 前端是等价的（g77 与此稍有不同）。其中库文件 libgfortranbegin.a (通过命令行选项 -lgfortranbegin 被调用) 包含运行和终止一个 Fortran 程序所必须的开始和退出代码。库文件 libgfortran.a 包含 Fortran 底层的输入输出等所需要的运行函数。</p>
<p>对于 g77 来说，下面两条命令是等价的（注意到 g77 对应的 <strong style="color: black; background-color: #a0ffff">gcc</strong> 是 4.0 之前的版本）：</p>
<pre>$ g77 -Wall hello.f -o hello<br />
$ <strong style="color: black; background-color: #a0ffff">gcc</strong>-3.4 -Wall hello.f -o hello -lfrtbegin -lg2c</pre>
<p>命令行中的两个库文件分别包含 Fortran 的开始和退出代码以及 Fortran 底层的运行函数。</p>
<img src ="http://www.blogjava.net/DreamAngel/aggbug/290408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DreamAngel/" target="_blank">飞翔天使</a> 2009-08-09 10:03 <a href="http://www.blogjava.net/DreamAngel/archive/2009/08/09/290408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不刻盘运行Knoppix（完整版）</title><link>http://www.blogjava.net/DreamAngel/archive/2009/07/04/285465.html</link><dc:creator>飞翔天使</dc:creator><author>飞翔天使</author><pubDate>Sat, 04 Jul 2009 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/DreamAngel/archive/2009/07/04/285465.html</guid><wfw:comment>http://www.blogjava.net/DreamAngel/comments/285465.html</wfw:comment><comments>http://www.blogjava.net/DreamAngel/archive/2009/07/04/285465.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DreamAngel/comments/commentRss/285465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DreamAngel/services/trackbacks/285465.html</trackback:ping><description><![CDATA[<ol>
    <li>用虚拟光驱软件（如DAEMON Tools等）加载下载的光盘映像，然后进入虚拟成的光盘，将KNOPPIX目录拷贝到FAT32分区上，如E:\KNOPPIX；
    <li>进入Knoppix光盘的&#8220;boot\isolinux&#8221;目录，将linux24和minirt24.gz拷贝到E盘根目录下（若您使用2.6.x内核，请拷贝linux26和minirt26.gz），然后将loadlin.exe放到E盘根目录下；
    <li>在E盘根目录下建立一个批处理文件，例如knoppix.bat，其内容内容如下：<br />
    loadlin linux24 root=/dev/hda6 ramdisk_size=100000 init=/etc/init lang=cn apm=power-off vga=791 initrd=minirt24.gz nomce quiet BOOT_IMAGE=knoppix myconfig=scan<br />
    其中/dev/hda6是Knoppix所在的FAT32分区。Knoppix将主分区当做/dev/hda1，第一个从分区为/dev/hda5，第二个从分区为/dev/hda6，依次类推，因此E盘是/dev/hda6。如果是第一次使用，可以去掉myconfig这个参数；
    <li>用vfloppy虚拟软驱进入dos界面；
    <li>进入你放置Knoppix的分区，输入knoppix.bat。 </li>
</ol>
<p>此方法适用于Knoppix 3.4以上版本。</p>
<p>注意：如果上述文件未放在盘符的根目录下，可能会出现以下错误：<br />
1.Can't find KNOPPIX filesystem,sorry.<br />
Dropping you to a (very limited) shell.<br />
Press reset button to quit.</p>
<p>Additional builtin commands avaliable:<br />
cat mount umount <br />
insmod rmmod lsmod</p>
<p>2.looking for CDROM in /dev/scd0</p>
<p>需要用到的工具：<br />
<a href="/Files/DreamAngel/linux/不刻盘运行Knoppix（完整版）/loadlin.rar">/Files/DreamAngel/linux/不刻盘运行Knoppix（完整版）/loadlin.rar<br />
</a><a href="/Files/DreamAngel/linux/不刻盘运行Knoppix（完整版）/VFloppy_PConline.rar">/Files/DreamAngel/linux/不刻盘运行Knoppix（完整版）/VFloppy_PConline.rar</a></p>
<img src ="http://www.blogjava.net/DreamAngel/aggbug/285465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DreamAngel/" target="_blank">飞翔天使</a> 2009-07-04 15:38 <a href="http://www.blogjava.net/DreamAngel/archive/2009/07/04/285465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu下用samba实现windows与linux文件共享</title><link>http://www.blogjava.net/DreamAngel/archive/2009/05/10/269875.html</link><dc:creator>飞翔天使</dc:creator><author>飞翔天使</author><pubDate>Sun, 10 May 2009 02:29:00 GMT</pubDate><guid>http://www.blogjava.net/DreamAngel/archive/2009/05/10/269875.html</guid><wfw:comment>http://www.blogjava.net/DreamAngel/comments/269875.html</wfw:comment><comments>http://www.blogjava.net/DreamAngel/archive/2009/05/10/269875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DreamAngel/comments/commentRss/269875.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DreamAngel/services/trackbacks/269875.html</trackback:ping><description><![CDATA[<p><strong>该文 讲述了 windows访问 linux，的一种方式，<br />
及linux访问windows的几种方式。</strong></p>
<div class="post-content">
<p><font size="2">ubuntu下用samba实现windows与linux文件共享<br />
</font></p>
<p><font size="2">首先要安装</font><strong style="color: rgb(255,163,79)">samba</strong><font size="2"><br />
</font></p>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><br />
            </td>
        </tr>
        <tr>
            <td class="code">sudo apt-get install <strong style="color: rgb(255,163,79)"><font size="2">samba</font></strong><br />
            sudo apt-get install smbfs</td>
        </tr>
    </tbody>
</table>
<p><span class="postbody"><br />
<strong>1.windows 访问 ubuntu</strong><br />
<font size="2">下面我们来共享群组可读写文件夹，假设你要共享的文件夹为： /home/ray/share</font></span><span class="postbody"><font size="2">首先创建这个文件夹</font></span></p>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code">mkdir /home/ray/share<br />
            chmod 777 /home/ray/share</td>
        </tr>
    </tbody>
</table>
<p><span class="postbody"><font size="2">备份并编辑smb.conf允许网络用户访问<br />
</font></span></p>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code">sudo cp /etc/<strong style="color: rgb(255,163,79)"><font size="2">samba</font></strong>/smb.conf /etc/<strong style="color: rgb(255,163,79)"><font size="2">samba</font></strong>/smb.conf_backup<br />
            sudo gedit /etc/<strong style="color: rgb(255,163,79)"><font size="2">samba</font></strong>/smb.conf</td>
        </tr>
    </tbody>
</table>
<p><span class="postbody"><font size="2">搜寻这一行文字<br />
</font></span></p>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code">; security = user</td>
        </tr>
    </tbody>
</table>
<p><span class="postbody"><font size="2">用下面这几行取代<br />
</font></span></p>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code">security = user<br />
            username map = /etc/<strong style="color: rgb(255,163,79)"><font size="2">samba</font></strong>/smbusers</td>
        </tr>
    </tbody>
</table>
<p><span class="postbody"><font size="2">将下列几行新增到文件的最后面，假设允许访问的用户为：newsfan。而文件夹的共享名为 Share</font></span></p>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code">[Share]<br />
            comment = Shared Folder with username and password<br />
            path = /home/ray/share<br />
            public = yes<br />
            writable = yes<br />
            valid users = newsfan<br />
            create mask = 0700<br />
            directory mask = 0700<br />
            force user = nobody<br />
            force group = nogroup<br />
            available = yes<br />
            browseable = yes</td>
        </tr>
    </tbody>
</table>
<p><span class="postbody"><font size="2">然后顺便把这里改一下，找到［global］把 workgroup = MSHOME 改成<br />
</font></span></p>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code">workgroup = WORKGROUP<br />
            display charset = UTF-8<br />
            unix charset = UTF-8<br />
            dos charset = cp936</td>
        </tr>
    </tbody>
</table>
<p><span class="postbody"><br />
<font size="2">后面的三行是为了防止出现中文目录乱码的情况。其中根据你的local，UTF-8 有可能需要改成 cp936。自己看着办吧。</font></span><span class="postbody"><font size="2">现在要添加newsfan这个网络访问帐户。如果系统中当前没有这个帐户，那么</font></span></p>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code">sudo useradd newsfan</td>
        </tr>
    </tbody>
</table>
<p><span class="postbody"><br />
<font size="2">要注意，上面只是增加了newsfan这个用户，却没有给用户赋予本机登录密码。所以这个用户将只能从远程访问，不能从本机登录。而且</font><strong style="color: rgb(255,163,79)">samba</strong><font size="2">的登录密码可以和本机登录密码不一样。</font></span><span class="postbody"><font size="2">现在要新增网络使用者的帐号：</font></span></p>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code">sudo smbpasswd -a newsfan<br />
            sudo gedit /etc/<strong style="color: rgb(255,163,79)"><font size="2">samba</font></strong>/smbusers</td>
        </tr>
    </tbody>
</table>
<p><span class="postbody"><font size="2">在新建立的文件内加入下面这一行并保存<br />
</font></span></p>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code">newsfan = &#8220;network username&#8221;</td>
        </tr>
    </tbody>
</table>
<p><span class="postbody"><font size="2">如果将来需要更改newsfan的网络访问密码，也用这个命令更改<br />
</font></span></p>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code">sudo smbpasswd -a newsfan</td>
        </tr>
    </tbody>
</table>
<p><span class="postbody"><font size="2">删除网络使用者的帐号的命令把上面的 -a 改成 -x<br />
</font></span></p>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>代码:</strong></span></td>
        </tr>
        <tr>
            <td class="code">sudo testparm<br />
            sudo /etc/init.d/<strong style="color: rgb(255,163,79)"><font size="2">samba</font></strong> restart</td>
        </tr>
    </tbody>
</table>
<p><font size="2"><strong>2．Ubuntu linux 系统访问windows xp/2003/2000系统</strong><br />
在我的测试过程中，实现ubuntu linux系统访问windows系统的方式有3种，我将这几种方式说明如下：</font></p>
<p><font size="2">第一种：用smb访问<br />
如果在ubuntu linux系统终端pingwindows主机的ip地址可以ping通，且windows计算机中有共享的文件夹，则打开位置下的网络服务器，点击界面 中windows网络-&gt;workgroup，在workgroup组中就可以看到windows计算机名，双击会弹出输入用户名和密码的对话框， 将我们上面设置smb的用户名和密码输入就可以进行访问。<br />
</font></p>
<p><font size="2">第二种：用ubuntu 系统自带的连接到服务器功能访问<br />
在位置中启动连接到服务器，在服务类型中选择&#8220;windows共享&#8221;，在服务器中输入windows计算机的ip地址或计算机名，点击连接，这样在系统桌面中就会显示一个连接到windows 计算机的文件卷。<br />
我们可以像访问ubuntu系统中的磁盘一样来访问它，同样在访问的时候要输入smb的用户名和密码。<br />
<strong></strong></font></p>
<p><font size="2"><strong>第三种：用mount挂载windows的共享目录到本地磁盘<br />
</strong>首先要在ubuntu系统中建立一个挂载点，在这里我们建立的挂在点为 /mnt/wind<br />
同样在保证网络连接正常，且windows中有共享目录的前提下，进行一下操作<br />
以windows的ip为192.168.0.1，共享文件夹为share为例<br />
命令如下：<br />
mount －t smbfs &#8211;o username=wangyh,password=123456 //192.168.0.1/share /mnt/wind<br />
有是这样在访问的时候会出现中文乱码的问题，这样我们可以按下面命令来执行，可以解决这个问题<br />
mount -t smbfs -o&nbsp;&nbsp; iocharset=uft8,codepage=cp936,clmask=777,fmask=777,userneme=wangyh,password=123456 //192.168.0.1/share /mnt/wind<br />
注解：usename和password都为smb的用户和密码，如果要详细了解mount命令，使用man mount在终端查看详细用法<br />
<strong>提示</strong>：要访问windows中有特殊密码的文件夹，可以在samba中新建一个与windows登录相同名相同密码的用户，然后mount即可，例：<br />
sudo useradd administrator //不要让其有登录ubuntu的权限<br />
sudo smbpasswd -a administrator<br />
然后提示输入密码：输入windows访问的密码即可<br />
</font><font size="2"><br />
第四种：使用smbclient 命令<br />
命令如下：<br />
smbclient //192.168.0.1/share －U wangyh<br />
password:输入smb用户wangyh的密码<br />
回车就可以用，用命令get下载文件，用put上传文件。<br />
注解：<br />
smbclient介绍：<br />
命令 说明<br />
?或help [command] 提供关于帮助或某个命令的帮助<br />
![shell command] 执行所用的SHELL命令，或让用户进入 SHELL提示符<br />
cd [目录] 切换到服务器端的指定目录，如未指定，则 smbclient 返回当前本地目录<br />
lcd [目录] 切换到客户端指定的目录；<br />
dir 或ls 列出当前目录下的文件；<br />
exit 或quit 退出smbclient<br />
get file1 file2 从服务器上下载file1，并以文件名file2存在本地机上；<br />
如果不想改名，可以把file2省略<br />
mget file1 file2 file3 filen 从服务器上下载多个文件；<br />
md或mkdir 目录 在服务器上创建目录<br />
rd或rmdir 目录 删除服务器上的目录<br />
put file1 [file2] 向服务器上传一个文件file1,传到服务器上改名为file2；<br />
mput file1 file2 filen 向服务器上传多个文件</font></p>
</div>
<img src ="http://www.blogjava.net/DreamAngel/aggbug/269875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DreamAngel/" target="_blank">飞翔天使</a> 2009-05-10 10:29 <a href="http://www.blogjava.net/DreamAngel/archive/2009/05/10/269875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu8.04常见问题</title><link>http://www.blogjava.net/DreamAngel/archive/2009/05/03/268670.html</link><dc:creator>飞翔天使</dc:creator><author>飞翔天使</author><pubDate>Sun, 03 May 2009 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/DreamAngel/archive/2009/05/03/268670.html</guid><wfw:comment>http://www.blogjava.net/DreamAngel/comments/268670.html</wfw:comment><comments>http://www.blogjava.net/DreamAngel/archive/2009/05/03/268670.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/DreamAngel/comments/commentRss/268670.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/DreamAngel/services/trackbacks/268670.html</trackback:ping><description><![CDATA[<h2>安装vmtools</h2>
<p>1、正常启动 Ubuntu 的虚拟机，在 VMWare 菜单上依次点击&nbsp; [VM] - [Install VMTools...]。<br />
2、在 Ubuntu 系统中打开所载入的光盘。（注：如果光盘载入失败，你可以手动载入 VMWare 程序文件夹下</p>
<p>的 LINUX.iso 文件。），将 tar.gz 包解压缩至桌面（或者其他你喜欢的位置）。<br />
3、在 Ubuntu 中依次进入 [Application] - [附件] - [终端]，输入：<br />
cd /home/angel/桌面/vmware-tools-distrib（用户名为 angel 就输入 angel，其他就输入其他。路径也一</p>
<p>样，是啥就输入啥）。<br />
4、然后再输入 sudo ./vmware-install.pl，然后一路回车，二十多个回车之后 VMTools 就安装成功了。</p>
<h2><br />
鼠标滚轮不能使用</h2>
<p>修改/etc/X11/xorg.conf中的一段代码<br />
Section "InputDevice"<br />
&nbsp;Identifier&nbsp;"Configured Mouse"<br />
&nbsp;Driver&nbsp;&nbsp; "vmmouse"<br />
&nbsp;Option&nbsp;&nbsp;"CorePointer"<br />
&nbsp;Option&nbsp;&nbsp;"Device"&nbsp;"/dev/input/mice"<br />
&nbsp;Option&nbsp;&nbsp;"Protocol" &nbsp;"ImPS/2"<br />
&nbsp;Option&nbsp;&nbsp;"ZAxisMapping" &nbsp;"4 5"&nbsp;&nbsp;&nbsp;<br />
&nbsp;Option&nbsp;&nbsp;"Emulate3Buttons" "yes"<br />
EndSection</p>
<h2><br />
xorg.conf错误，不能启动xserver</h2>
<p>在终端模式下登陆，输入sudo dpkg-reconfigure xserver-xorg重新配置一下你的xorg.conf。<br />
<br />
</p>
<h2><br />
升级firefox3正式版中文支持问题解决</h2>
sudo aptitude install firefox-3.0<br />
升级完成后重启firefox发现变成了英文版，在这个网站可以找到中文插件 <br />
http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0/linux-i686/xpi/ <br />
点击zh-CN.xpi就会自动安装完成插件，重启以后firefox就变成中文了。<br />
<br />
<h2><br />
星际译王清空历史</h2>
<p>rm -rf ~/.stardict</p>
<br />
<h2><br />
观看rmvb视频格式的电影</h2>
sudo apt-get install mplayer mplayer-fonts mplayer-skins mozilla-mplayer<br />
w32codecs下载地址:http://debian-multimedia.org/pool/main/w/w32codecs/<br />
<h2><br />
GDM登录前NUMLOCK打开的问题</h2>
<p>以8.04为例安装numlockx<br />
代码:<br />
sudo apt-get install&nbsp; numlockx<br />
编辑启动文件<br />
代码:<br />
sudo gedit /etc/gdm/Init/Default<br />
8.04以前的用户，该文件可能在/etc/X11／gdm/Init/Default下<br />
在最后一行（应该是"exit 0"）之前添加以下代码:<br />
if [ -x /usr/bin/numlockx ]; then<br />
/usr/bin/numlockx on<br />
fi<br />
</p>
<h2><br />
安装flash播放器</h2>
<p>下载个flash 9 播放器<br />
<a href="http://www.adobe.com/support/flashplayer/downloads.html#fp9">http://www.adobe.com/support/flashplayer/downloads.html#fp9</a><br />
1. 解压flashplayer.tar.gz 并拷贝到 /usr/bin <br />
2. 制作用来显示的图标, 拷贝到 /usr/share/pixmaps <br />
3. 新建一个flashplayer.desktop文件, 拷贝到/usr/share/applications <br />
-------------------falshplayer.desktop的内容------------------------------------ <br />
[Desktop Entry] <br />
Name=FlashPlayer 9 <br />
Name[zh_CN]=FlashPlayer 9 <br />
GenericName=Media Player <br />
Exec=flashplayer <br />
Type=Application <br />
Encoding=UTF-8 <br />
Icon=flash48.png <br />
Categories=GNOME;Application;AudioVideo;Audio;Video;Player <br />
MimeType=video/swf <br />
---------------------------------------------------------------------------- <br />
上传一个做好了的包，经过操作作后就可以从 &#8220;应用程序&#8221;－＞ 影音－＞ FlashPlayer 9 启动swf播放器了</p>
<a href="/Files/DreamAngel/ajax/flashplayer.rar">/Files/DreamAngel/ajax/flashplayer.rar</a>
<img src ="http://www.blogjava.net/DreamAngel/aggbug/268670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/DreamAngel/" target="_blank">飞翔天使</a> 2009-05-03 10:16 <a href="http://www.blogjava.net/DreamAngel/archive/2009/05/03/268670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>