﻿<?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>C++博客-C/C++ @ Linux-文章分类-CDK @ Linux</title><link>http://www.cppblog.com/kozmers/category/8848.html</link><description>kozux</description><language>zh-cn</language><lastBuildDate>Sat, 29 Nov 2008 10:02:50 GMT</lastBuildDate><pubDate>Sat, 29 Nov 2008 10:02:50 GMT</pubDate><ttl>60</ttl><item><title>构建C/C++开发环境(包括gtk/qt等各种开发库)</title><link>http://www.cppblog.com/kozmers/articles/68156.html</link><dc:creator>kozux</dc:creator><author>kozux</author><pubDate>Sat, 29 Nov 2008 05:45:00 GMT</pubDate><guid>http://www.cppblog.com/kozmers/articles/68156.html</guid><description><![CDATA[1. C/C++编译器和基本库和常用工具（gcc系列）
<br>所需要的软件包：
<div class="codetitle"><strong>代码:</strong></div>
<div class="codecontent">build-essential</div>
<br>这个软件包安装了gcc，g++编译器以及相关的标准库，同时还安装了gnu make和dpkg-dev。<br>2. GTK/GNOME开发环境（库、IDE、工具）<br>所需要的软件包：
<div class="codetitle"><strong>代码:</strong></div>
<div class="codecontent">gnome-devel</div>
<br>基本文档（软件包）：
<div class="codetitle"><strong>代码:</strong></div>
<div class="codecontent">gnome-dev-doc</div>
<br><br>3. Qt/KDE开发环境（库、工具、IDE）<br>库、工具（软件包）：
<div class="codetitle"><strong>代码:</strong></div>
<div class="codecontent">kdesdk</div>
<br>库、工具的文档（软件包）：
<div class="codetitle"><strong>代码:</strong></div>
<div class="codecontent">kdesdk-doc-html</div>
<br>IDE（软件包）：
<div class="codetitle"><strong>代码:</strong></div>
<div class="codecontent">kdevelop</div>
<br>IDE文档（软件包）：
<div class="codetitle"><strong>代码:</strong></div>
<div class="codecontent">kdevelop-doc</div>
<br><img src ="http://www.cppblog.com/kozmers/aggbug/68156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kozmers/" target="_blank">kozux</a> 2008-11-29 13:45 <a href="http://www.cppblog.com/kozmers/articles/68156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux系统上的C/C++编译器 </title><link>http://www.cppblog.com/kozmers/articles/67036.html</link><dc:creator>kozux</dc:creator><author>kozux</author><pubDate>Sun, 16 Nov 2008 01:43:00 GMT</pubDate><guid>http://www.cppblog.com/kozmers/articles/67036.html</guid><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;"><br></span><span style="color: #000000;"></span></div>
Linux 中最重要的软件开发工具是 GCC。GCC 是 GNU 的 C 和 C++ 编译器。实际上，GCC能够编译三种语言：C、C++和ObjectC（C语言的一种面向对象扩展）。利用 gcc 命令可同时编译并连接 C 和 C++ 源程序。<br><br>terminal 终端<br>gcc //编译器<br>cpp<br>libgcc<br>libc6 //库 标准库 数学函数 在libc.so.6目录下<br>binutils //连接工具<br>/usr/bin/size<br>/usr/bin/ar<br>/usr/bin/objdump<br>/usr/bin/strings<br><br>/usr/bin/as<br>/usr/bin/ld<br>locals //提供本地支持<br>libc6-dev //c共享库 头文件<br>glibc-doc //文档<br>glibc-doc-reference //参考手册<br>manpages-dev //man 函数用法<br>make //维护源代码<br>make-doc<br>gdb //调试程序<br>vim //编辑器<br><br><br>indent //格式化源代码<br><br>如果你有两个或少数几个C源文件，也可以方便地利用GCC编译、连接并生成可执行文件。例如，假设你有两个源文件&nbsp;
<span style="color: #ffffff;">main.c 和 factorial.c 两个源文件，现在要编译生成一个计算阶乘的程序。<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">清单&nbsp;factorial.c</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>#include<br>#include<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;factorial&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n)<br>{<br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(n&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br></span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;factorial&nbsp;(n&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;n;<br>}</span></div>
<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">清单&nbsp;main.c</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">#include<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">#include<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;factorial&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n);<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;argc,&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">**</span><span style="color: #000000;">argv)<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n;<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(argc&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">)&nbsp;{<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">printf&nbsp;(</span><span style="color: #000000;">"</span><span style="color: #000000;">Usage:&nbsp;%s&nbsp;n&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;argv&nbsp;[</span><span style="color: #000000;">0</span><span style="color: #000000;">]);<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">n&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;atoi&nbsp;(argv[</span><span style="color: #000000;">1</span><span style="color: #000000;">]);<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">printf&nbsp;(</span><span style="color: #000000;">"</span><span style="color: #000000;">Factorial&nbsp;of&nbsp;%d&nbsp;is&nbsp;%d.&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;n,&nbsp;factorial&nbsp;(n));<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">}<br></span></div>
<span style="color: #000000;">利用如下的命令可编译生成可执行文件，并执行程序：
</span><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">$&nbsp;gcc&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">o&nbsp;factorial&nbsp;main</span><span style="color: #000000;">.</span><span style="color: #000000;">c&nbsp;factorial</span><span style="color: #000000;">.</span><span style="color: #000000;">c<br><br>$&nbsp;</span><span style="color: #000000;">./</span><span style="color: #000000;">factorial&nbsp;</span><span style="color: #800000;">5</span><span style="color: #000000;"><br><br>Factorial&nbsp;of&nbsp;</span><span style="color: #800000;">5</span><span style="color: #000000;">&nbsp;is&nbsp;</span><span style="color: #800000;">120</span><span style="color: #000000;">.</span><span style="color: #000000;">&nbsp;</span></div>
<br>
<p style="color: #000000;">GCC 可同时用来编译 C 程序和 C++ 程序。一般来说，C 编译器通过源文件的后缀名来判断是 C 程序还是 C++ 程序。在 linux 中，C 源文件的后缀名为 .c，而 C++ 源文件的后缀名为 .C 或 .cpp。</p>
<p style="color: #000000;">但是，gcc 命令只能编译 C++ 源文件，而不能自动和 C++ 程序使用的库连接。因此，通常使用 g++ 命令来完成 C++ 程序的编译和连接，该程序会自动调用 gcc 实现编译。</p>
<p style="color: #000000;">假设我们有一个如下的 C++ 源文件（hello.C）：</p>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">&nbsp;#include<br></span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&nbsp;<br></span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main&nbsp;(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">)<br></span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">&nbsp;<br></span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">&nbsp;{<br></span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">&nbsp;<br></span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">&nbsp;　cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Hello,&nbsp;world!</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;endl;<br></span><span style="color: #008080;">8</span>&nbsp;<span style="color: #000000;">&nbsp;<br></span><span style="color: #008080;">9</span>&nbsp;<span style="color: #000000;">}</span></div>
<br style="color: #000000;"><span style="color: #000000;">则可以如下调用 g++ 命令编译、连接并生成可执行文件：
</span><br style="color: #000000;">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">$&nbsp;g</span><span style="color: #000000;">++</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">o&nbsp;hello&nbsp;hello</span><span style="color: #000000;">.</span><span style="color: #000000;">C<br><br>$&nbsp;</span><span style="color: #000000;">./</span><span style="color: #000000;">hello<br><br>Hello</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;world</span><span style="color: #000000;">!</span><span style="color: #000000;"><br></span></div>
<br><span style="color: #000000;">Gcc的主要选项
</span><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">-</span><span style="color: #000000;">ansi&nbsp;只支持&nbsp;ANSI&nbsp;标准的&nbsp;C&nbsp;语法。这一选项将禁止&nbsp;GNU&nbsp;C&nbsp;的某些特色，例如&nbsp;asm&nbsp;或&nbsp;</span><span style="color: #0000ff;">typeof</span><span style="color: #000000;">&nbsp;关键词。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">c&nbsp;只编译并生成目标文件。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">DMACRO&nbsp;以字符串&#8220;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#8221;定义&nbsp;MACRO&nbsp;宏。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">DMACRO</span><span style="color: #000000;">=</span><span style="color: #000000;">DEFN&nbsp;以字符串&#8220;DEFN&#8221;定义&nbsp;MACRO&nbsp;宏。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">E&nbsp;只运行&nbsp;C&nbsp;预编译器。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">g&nbsp;生成调试信息。GNU&nbsp;调试器可利用该信息。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">IDIRECTORY&nbsp;指定额外的头文件搜索路径DIRECTORY。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">LDIRECTORY&nbsp;指定额外的函数库搜索路径DIRECTORY。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">lLIBRARY&nbsp;连接时搜索指定的函数库LIBRARY。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">m486&nbsp;针对&nbsp;</span><span style="color: #000000;">486</span><span style="color: #000000;">&nbsp;进行代码优化。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">o&nbsp;FILE&nbsp;生成指定的输出文件。用在生成可执行文件时。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">O0&nbsp;不进行优化处理。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">O&nbsp;或&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">O1&nbsp;优化生成代码。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">O2&nbsp;进一步优化。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">O3&nbsp;比&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">O2&nbsp;更进一步优化，包括&nbsp;inline&nbsp;函数。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">shared&nbsp;生成共享目标文件。通常用在建立共享库时。<br><br></span><span style="color: #000000;">-</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;禁止使用共享连接。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">UMACRO&nbsp;取消对&nbsp;MACRO&nbsp;宏的定义。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">w&nbsp;不生成任何警告信息。<br><br></span><span style="color: #000000;">-</span><span style="color: #000000;">Wall&nbsp;生成所有警告信息。</span></div>
<br>
</span>    <img src ="http://www.cppblog.com/kozmers/aggbug/67036.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kozmers/" target="_blank">kozux</a> 2008-11-16 09:43 <a href="http://www.cppblog.com/kozmers/articles/67036.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>