linux gcc 命令

来源:互联网 发布:linux显示文件内容 编辑:程序博客网 时间:2024/05/17 03:54

1,-c 编译目标代码


      gcc -o hello.o -c hello.c  //-o 只是指定生成目标文件名

      或

      gcc -c hello.c

      都生成hello.o文件,不可以执行。

      gcc -o hello hello.o

      用目标文件生成hello可执行文件。

      gcc -o hello hello.c

      用源文件直接生成hello可执行程序。


2,-fpic或-fPIC   产生位置无关的目标代码,可用于构造共享函数库。


  # gcc -fPIC -c message.c

  “PIC”命令行标记告诉 GCC产生的代码不要包含对函数和变量具体内存位置的引用,这是因为现在还无法知道

使用该消息代码的应用程序会将它连接到哪一段内存地址空间。这样编译输出的文件 message.o 可以被用于建立

共享函数库。

  # gcc -shared -o libmessage.so message.o

  将上面的mian.c使用共享库函数ligmessage.so编译:

  # gcc -o goodbye -lmessage -L. message.o

 

3,gcc的常用连接选项有下列几个:


  -Ldir   将dir目录加到搜寻-l选项指定的函数库文件的目录列表中去,并优先于gcc缺省的搜索目录。在有多个-L

选项的情况下,按命令行上-L选项的前后顺序搜索。dir可使用相对路径。如-L../lib等。

  -lname   在连接时使用函数库libname.a,连接程序在-Ldir选项指定的目录下和/lib,/usr/lib目录下寻找该库文件。在没有使用-static选项时,如果发现共享函数库libname.so,则使用libname.so进行动态连接。

  -static   禁止与共享函数库连接。

  -shared   尽量与共享函数库连接。


4,编译选项顺序


          $ gcc test.o -L. -lhello -o test

          注意: $gcc -L. -lhello test.o -o test 会出错!。
         原因是: -l是链接器选项,必须要放到被编译文件的后面。 所以上面的命令中-lhello一定要放到 test.o的后面。

原创粉丝点击