欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux下使用gcc编译c文件入门 博客分类: Clinxu操作系统 gcclinuxc 

程序员文章站 2024-03-06 23:44:32
...
最近有项目用到在linux上使用gcc编译c源程序的工作,于是针对这块做了一些整理,列出

使用gcc在linux下编译c的一些最基础指令

gcc -[command] c文件名称 -o 生成文件别名

command(指令)--

       W----(warning警告)
      
       例如: gcc -Wall hello.c -o hello

       -version (查看当前gcc版本)

       例如:gcc --version

       
       gcc -help(查看帮助)
 
       例如:gcc --help    


       gcc -Wall file1 file2 ... -o outfilename (gcc 编译多个文件)

       注:头文件是不需要进行编译的

       例如:gcc -Wall one.c two.c three.c -o liujun


linux 系统头文件一般放在/usr/include 或者是 /usr/local/include

       include<> 与 include "" 区别是

       include "" 是现在当前目录下查找对应的包含文件,如果没有才会到系统目录去查找对应的头文件

       include <> 是直接到系统目录下去查找对应的头文件,不会在当前目录查找头文件

       
        gcc -v  filename   显示出gcc编译以及链接的所有信息

        例如: gcc -Wall -v hello.c -o hello

        gcc -c filename  将当前文件编译成一个目标文件(但不连接)

        例如 gcc -Wall -c hello.c (生成一个以扩展名为.o的目标文件)


        gcc filename.o filename1.o -o targetFile  将生成的目标文件进行合并成一个可执行文件

        例如:gcc one.o two.o -o hello


        linux 标准库路径 /usr/lib  and /lib
         

        gcc -Wall filename.c /path/file.a  -o targetfilename.o  链接编译外部库

        例如: gcc -Wall main.c /usr/lib/libm.a -o calc

    
        1.gcc -Wall main.c /usr/lib/libm.a -o calc
               
        2.gcc -Wall main.c -lm -o calc 

        注:第二个命令与第一句的文件名是相同的,使用 -l 表明当前文件是一个库文件

         且是以lib为前戳的。


        gcc -I path   告诉编译器在指定的path目录下查找头文件

        例如: gcc -Wall main.c -I/usr/opt

        gcc -L path   告诉编译器在指定的path目录下查找库文件


        ar cr libname.a  file1.o file2.o file3.o ... filen.o

       将单独的目标文件(.o)文件 整合成一个库文件(名字叫libname.a),一般程序

        在与库文件进行结合调用使用

        例如: ar cr libhello.a fun1.o fun2.o

        ar t libname.a  查看当前libname.a库中由多少个目标文件生成

        gcc -Wall  main.c libname.a(o) -o hello  将一个目标文件与一个库文件

        编译生成一个库文件(顺序必须先写调用文件在写库文件)

        gcc -Wall  main.c -L/usr/opt -lhello -o liujun  在/usr/opt目录

        下查找文件名是libhello.a的库文件

        共享库默认加载库目录

        /usr/local/lib  和 /usr/lib  设置LD_LIBRARY_PATH改变共享加载库路径


        gcc -Wall -ansi hello.c -o hello (-ansi 使用标准的c进行编译)

        gcc -Wall -DTEST hello.c -o hello (-D 相当于在程序中的#define TEST)

        cpp -dM /dev/null  (查看gcc中系统内置定义的宏)

     编译程序需要执行四个步骤:
      
       1.预编译:
        cpp main.c > main.i  (将文件main.c文件中包含的头文件的内容加载进当前

        main.i这个文件当中,这就是预编译阶段)

       2.编译转化为汇编语言
       
        gcc -Wall -S main.c (将文件 main.c文件中的内容转化成汇编语言)

       3.生成目标文件

        as main.s -o main.o

       4.链接目标文件到一个可执行文件(包含链接系统头文件库,程序中使用到的静态库或者动态库)

         gcc main.o
       

      file file.o 查看文件信息

        ldd main   查看可执行文件main所依赖的库(main文件必须是可执行文件)
相关标签: gcc linux c