原文:http://www.linuxidc.com/Linux/2012-11/73360.htm


1、c语言中的各种后缀名代表的意思:

.a文件代表的是静态库

.c代表c源代码

.h代表c源代码头文件

.i代表的是c源代码(这是被预处理过后的结果)

.o对象文件

.s汇编语言的代码

.so动态库


2、c语言程序从源代码到生成可执行文件的过程:c程序源代码(.c文件)-----(1)-----不用预处理的c程序源代码(.i文件)----(2)---汇编语言文件(.s文件)------(3)-----机器语言文件(.o文件)-----(4)------可执行文件

其中的每个过程的意义如下:过程(1)是预处理阶段,这个阶段主要是根据#开头的命令修改c源文件,主要的工作是,比如#include<stdio.h>命令告诉预处理器读取系统文件stdio.h的内容并且把相应的内容插入到源代码中去,就形成了.i文件。

过程(2):这个过程是编译阶段,编译器将文本文件.i文件翻译成文本文件.s文件。这个文件是与源文件等效的汇编语言程序。

过程(3):这个过程主要是汇编阶段,在这个阶段中汇编器将.s文件编译成机器语言指令就是这里的.o文件。

过程(4):这个过程是链接阶段,这个阶段主要就是将程序中的一些库函数用链接器给进行链接(链接过程包括静态链接和动态链接,在这里就不细说了)。

3、讲一下Ubuntu下面c源程序的各种文件的获得:(比如有一个源程序为hello.c文件)

(1)、为了获得可执行文件可以使用命令:gcc hello.c -o a其中-o是用来指定所生成的可执行程序的文件名,比如这里生成的文件名是a。

(2)、如果程序中用到了不是gcc默认的库函数的时候,比如程序中用到了math.h这个头文件。这个头文件不是gcc默认的头文件,所以在编译的时候要加入-l库的首字母来进行编译。比如这里是:gcc hello.c -lm -o a.

(3)、为了将源程序编译成.o文件的命令是指定参数-c来进行编译。例如这里要生成hello.o文件的编译为:gcc -c hello.c -o hello.o。

(4)如果要执行预处理的话,使用的编译代码就是加上参数-E来进行编译,比如我们这里要生成hello.i文件,则我们编译代码是:gcc -E hello.c -o hello.i。

(5)、如果要生成汇编代码,使用的编译代码就是加上参数-S进行编译,比如我们要生成hello.s文件,则我们使用的编译代码是:gcc -S hello.c -o hello.s。

Ubuntu下编译C程序的详解的更多相关文章

  1. Xcode:将WorkspaceSettings.xcsettings添加到源代码管理中

    在Xcode中,更改文件>中的设置.工作区设置…

  2. 在iOS模拟器中查看源代码?

    有没有人知道我可以在Apple的iOS模拟器中检查网站源代码的工具?像Firebug或Chrome开发者工具这样的东西会很棒,我还没有找到任何东西.解决方法之前的旧答案已被删除,因为它们包含过时的信息.至少使用Xcode4和Safari6,在iPhone模拟器中打开Web视图,然后切换到桌面Safari.在Safari的“开发”菜单中,您将找到“iPad模拟器”菜单,该菜单允许您为模拟器中打开的页面打开SafariWebInspector!

  3. .dylib在Debug中链接,在XCode中找不到适用于iPhone的版本

    所以我已经将libxml2.2.dylib库包含在我的iPhoneXCode项目中,以创建一些Xml和XPath解析实用程序.当我编译并运行在模拟器和设备的调试模式时,我没有问题,但是,当我切换到发布模式我得到…

  4. 在编译的iOS应用程序(IPA)中加密内容

    由于IPA结构只是一个压缩文件,包含编译代码媒体内容,如图像&音频,我如何保护内容免受别人的窃取?是否有加密可以添加到IPA?

  5. ios – 如何在Xcode中创建机器人?获取“创建机器人需要一个受源代码控制的项目”.

    ]单击取消或配置遥控器会打开我的文件夹的配置,我看到我的遥控器添加得很好.我还尝试使用不同的名称再次添加远程存储库.我该如何前进?解决方法似乎这个问题发生在没有名为“origin”的远程时,因为这就是Xcode正在寻找的东西.当我将我的遥控器重命名为原点时,Xcode停止了抱怨,让我通过XcodeUI添加机器人.

  6. ios – 如何在Xcode中调试插件源代码?

    我是新手为AppleMail应用程序创建插件,我想为OSX创建AppleMail插件.我在Xcode中的“InstallerPlug-in”下创建了一个项目,但是我不能像简单的iOS应用程序一样调试该项目.可能吗?如果可能的话请帮助我.解决方法我找到了这个问题的解决方案.只需按照Xcode中的插件代码调试步骤操作即可.步骤1=转到Xcode中的编辑方案,然后转到Editscheme=>.步骤2=从侧窗口选择运行和信息选项卡,然后从下拉列表中选择可执行应用程序保持你的应用程序运行ant尝试调试你的插件源代码

  7. ios – 检查“NeXT / Apple typedstream”版本4(NSArchiver)类型的文件

    对于数据恢复程序,我需要能够从NSArchiver编写的文件中提取值类型,而无需访问Apple的CF/NS框架.OSXfile命令报告以下文件:是否有关于如何编码这些文件的文档,或者是否有人提出可以解析它们的代码?

  8. Xcode中的单个.swift文件是否可以包含iOS应用程序的完整源代码?

    换句话说,Xcode中的Swift代码可以像在Playground文件中那样运行吗?

  9. ios – Swift 4向后兼容性

    一起使用.有没有办法在两个版本的Xcode中使这个工作?Swift4是否应该向后兼容?

  10. Swift与OC混合编译

    SWift调用OC新建swift文件此时系统自动生成-Bridging-Header.h文件并且TARGETS->BuildSettings->Objective-CBridgingHeader(搜索bridg)选项中会自动填入以上头文件的路径在-Bridging-Header.h中#import要调用的OC对象头文件OC调用Swift在OC文件中#import“

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部