Linuxgcc编译器使用方法_第1页
Linuxgcc编译器使用方法_第2页
Linuxgcc编译器使用方法_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linuxgcc 编译器使用方法LINUX gcc 编译器使用方法本文介绍了在 LINUX 下进行 C 语言编程所需的基本知识。在本文 中,我们将学习以下内容 :源代码编译编译文件编译库链接程序调试头文件和系统帮助|源代码编译是在 Linux 下进行的。如果你想编译一个 c 语言源程序,我们将使用GNU的gcc编译器。让我们举一个例子来说明如何使用gcc编译器。假设我们有以下非常简单的源程序 (你好。INTMAIN(INTARGGC ,CHAR * * ARGV)PRINTF(Hello Linux) ;要编译这个程序,我们只需要在命令行执行。cgcc 编译器将为我们生成一个 hello 可执

2、行文件。 执行。 /你好可以看 到程序的输出。在命令行中,gcc表示我们使用gcc来编译我们的源 程序。 o 选项表示我们需要编译器输出给我们的可执行文件叫做 hello , hello.c 是我们的源程序文件。-ogcc 编译器有许多选项。一般来说,我们只需要知道其中的一些 选项我们已经知道,这意味着我们需要输出可执行文件的名称。 -c 选项意味着我们只需要编译器输出目标代码。 但是,没有必要输出可 执行文件。-g 选项意味着我们需要编译器在以后编译时为我们提供调试程序的 信息。如果知道这三个选项,我们可以编译自己编写的简单源程序。如果您想 了解更多选项,可以查看 gcc 帮助文档。有许多其

3、他选项的详细描述。2。makefile的编写假设我们有这样一个程序。源代码如下 :/* main . c */# include mytol 1 . h # include mytol 2 . h intmain(intargc,char * * argv)mytol 1 _ print(hello) ; mytool2_print(您好);/* my tool 1 . H */# if ndef _ MYTOL _ 1 _ H# define _ MYTOL _ 1 _ Hvoid my tool 1 _ print(char * print _ str) ; # endif/* my to

4、ol 1 . c */# include my tool 1 . h void my tool 1 _ print(char * print _ str)printf(这是 mytooll print, print _ str); /* my tool 2 . H */# if ndef _ MYTOL _ 2 _ H # define _ MYTOL _ 2 _void my tool 2 _ print(char * print _ str) ;# endif /* my tool 2 . c */# include my tool 2 . h void my tool 2 _ print

5、(char * print _ str)printf(这是mytool2 print, print _ str);当然,因为这个程序很短,所以我们可以编译gcc-c main . cgcc-c my tool 1 . cgcc-c my tool 2 . cgcc-o main . o my tool 1 . o my tool 2 . o。这样,我们也可以生成主程序,而且有时非常麻烦。但是如果我们考虑到如果有一天我们修改了一个文件(例如mytooll.c),那么我们必 须重新输入上面的命令吗?也许你会说, 这很容易解决。 我可以写一 个 SHELL 脚本,让她帮我完成。是的,它可以为这个程序

6、工作。但 是当我想到更复杂的事情时,如果我们的程序有数百个源程序,我们需要 编译器一个接一个地编译吗?由于这个原因, 聪明的程序员想出了一个很好的工具来做到这一点,那就是make。只要我们执行以下步骤,我们就能解决上述问题。在 我们执行make之前,我们必须先写一个非常重要的文件。Makefile.对于上述程序,一个可能的 Makefile 文件是#这是 Makefile 文件main:main . OMI tool 1 . OMI tool 2 . ogcc-o main . o my tool 1 . o my tool 2 . omain . o:main . c my tool 1 .

7、 h my tool 2 . hgcc-c main . cmy tool 1 . o 她不想管理的其他文件。 下面我们学习 Makefile 是如何 编写的。 Makefile 中的#起始行也是注释行。 Makefile 中最重要的事情是描述文件的依赖 性。一般格式是 :目标:组件选项卡规则第一行表示依赖关系。第二行是规则。例如,第二行main:main . o my tool 1 . o my tool 2 . o 表示我们目标的组件是 main . omytool 1 . o my tool 2 . o 如果在目标被修改后从属对象被修改, 我将 执行规则行中指定的命令。正如我们在上面 M

8、akefile 的第三行所说 的,我将执行 gcc-o main.o mytool 1.o mytool 2.o 注意,规则行中的 TAB 表示有一个 TAB 键Makefile 有三个非常有用的变量。它们分别是 $ 、$、和$,这意味 着$目标文件, $所有相关文件, $第一个相关文件。如果我们使用上述三个变量,那么我们可以将 Makefile 简化为 #这是简化的 makefilemain:main . OMI tool 1 . OMI tool 2 . o o my tool 2 . ogcc-o $ $。c.o:gcc-c $ok。我们的Makefile差不多。如果您想了解更多关于 M

9、akefile规则 的信息,可以查看相应的文档。3。链接到库。尝试编译以下程序/* temp . c */# includeint main(int argc, char * * argv)double value;printf(值:%f,值);程序非常简单,但是当我们用gcc-otemp . c编译时,会出现下面的错误。/tmp/cc 33 kydu . o:INF function ' ' main acute; 急性;: /tmp/cc33Kydu.o(。text+Oxe):未定义对 '' logacute 的引用。急性; collect 2:ldretu

10、rned 1 退出状态发生此错误是因为编译器找不到日志的特定实现。 虽然我们包含了正 确的头文件,但是,我们仍然需要在编译时连接某些库。在 Linux下,为了使用数学函数,我们必须连接数学库,所以我们需要添加 -lm 选项。这样我们可以正确编译。有些人可能会问,为什么我们之 前使用 printf 函数时没有连接库?嗯,为了实现一些通用函数, gcc 编译器会自动连接一些通用库, 所以我们不需要指定库的路径。 有时 我们需要在编译程序时指定库的路径, 此时我们需要使用编译器的 -L 选项来指定路径。例如,我们在 /home/hoyt/mylib 下有一个图书馆。 这样,我们需要在编译时添加 -L

11、/home/hoyt/mylib 。对于一些标准库, 我们不需要指出路径。 只要它们在默认库的路径下。 对于系统默认库 路径 /lib /usr/lib /usr/local/lib 的三个路径下的库,我们不能指定路径。还有另一个问题。有时我们使用某个函数,但是我们不知道这个库 的名字。这个时候我们应该做什么?对不起, 我也不知道这个问题的 答案。我只有一个愚蠢的方法。首先,我在标准库路径下查找是否有 任何与我使用的函数相关的库, 所以我找到了线程函数的库文件。 当 然,如果我找不到,只有一个愚蠢的方法。例如,如果我想找到 sin 所在的库,我必须使用nm -o /lib/*。所以|grep

12、sin /sin命令,然后查 看/sin文件并去那里。在sin文件中,我会找到这样一行 ,这样我就可以知道 sin 在 库中,并且我可以使用 -lm 选项(在删除了前一个 lib 和后一个版本标 记之后,只剩下M,所以它是-Im)。如果你知道如何找到它,请尽快 告诉我,我将非常感激。谢谢你!4。程序调试我们编写的程序不可能一次成功。 我们的程序中会有许 多意想不到的错误。此时,我们将调试我们的程序。 gdb 是 最常用的调试软件。如果你想在图形界面下调试程序,那么你现在 可以选择xxgdb。编译时记得添加-g选项。对于gdb的使用,你可以 看到 gdb 的帮助文件。 因为我没有用过这个软件, 所以我不知道如何 使用它。但是我不喜欢用广发银行。跟踪一个程序是非常烦人的。我 通常使用中间变量的值来调试程序。 当然,你可以选择你自己的方法 。没有必要向别人学习。现在有许多集成开发环境。我已经把自己 的调试器带来了。你可以选择几个,试着找一个你喜欢的。5。头文件和系统帮助有时我们只知道函数的近似形式, 而不记得确 切的表达式。或者我们不记得函数是在头文件中解释的。这时,我们 可以求助于系统。例如,我们想知道 fread 的确切形式。我们只需要执行 man fread 系统来输出该功能的详细说明。 该函数所在的头文件解释了。 如果我 们想写这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论