linux 怎么编译c的源程序的?gcc,编译命令是什么?

linux 怎么编译c的源程序的?gcc,编译命令是什么?,第1张

在Linux下面,如果要编译一个C语言源程序,我们要使用gcc编译器。

先将源文件编译成目标文件:gcc - c hello.c

生成hello.o文件,再将目标文件编译成可执行文件:gcc -o hello hello.o

如:

int main(int argc,char **argv)

{

printf("Hello Linux\n")

}

扩展资料:

在使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。具体可参考GCC Manual。

GCC最基本的用法是∶gcc [options] [filenames]

其中options就是编译器所需要的参数,filenames给出相关的文件名称。

参考资料:

百度百科_gcc

格式 gcc [option] [sourcefilename]

介绍一些常用的选项:最简单的是:gcc hello.c

默认的情况下将生成a.out的可执行性文件,你只需要在终端上输入./a.out就可以看到执行的结果.

如果你想指定生成目标文件的名字那么你可以加上 -o选项,命令如下:

gcc -o hello hello.c

命令如下:

gcc -c hello hello.c

linux系统编译C++程序时头⽂件和库⽂件搜索路径

C++编译时,教科书中写道:#include “headfile.h”优先在当前⽬录查找头⽂件;#include <headfile.h>从系统默认路径查找头⽂件。先

前以为系统默认路径是环境变量$PATH指定的路径,在系统上⼀查,傻了眼:

-bash-3.2$ echo$PATH

/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/java/j2re1.4.0/bin:/usr/atria/bin:/ccase/bin:/home/devcomp

全是bin⽬录,$PATH是运⾏可执⾏⽂件时的搜索路径,与include头⽂件的搜索路径⽆关,可能不少⼈犯了我这样的错误。

头⽂件:

1. #include“headfile.h”

搜索顺序为:

①先搜索当前⽬录

②然后搜索-I指定的⽬录

③再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使⽤的是C_INCLUDE_PATH)

④最后搜索gcc的内定⽬录

/usr/include

/usr/local/include

/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include

各⽬录存在相同⽂件时,先找到哪个使⽤哪个。

2. #include<headfile.h>

①先搜索-I指定的⽬录

②然后搜索gcc的环境变量CPLUS_INCLUDE_PATH

③最后搜索gcc的内定⽬录

/usr/include

/usr/local/include

/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include

与上⾯的相同,各⽬录存在相同⽂件时,先找到哪个使⽤哪个。这⾥要注意,#include<>⽅式不会搜索当前⽬录!

这⾥要说下include的内定⽬录,它不是由$PATH环境变量指定的,⽽是由g++的配置prefix指定的(知道它在安装g++时可以指定,不知安

装后如何修改的,可能是修改配置⽂件,需要时再研究下):

-bash-3.2$ g++ -v

Using built-inspecs.

Target:x86_64-redhat-linux

Configured with:../configure --prefix=/usr --mandir=/usr/share/man--infodir=/usr/share/info --enable-shared --enable-threads=posix--enable-checking=release --with-system-zlib --enable-__cxa_atexit--disable-libunwind-exceptions --enable-libgcj-multifile--enable-languages=c,c++,objc,obj-c++,java,fortran,ada--enable-java-awt=gtk --disable-dssi --enable-plugin--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre--with-cpu=generic --host=x86_64-redhat-linux

Thread model:posix

gcc version 4.1.2 20080704(Red Hat 4.1.2-46)

在安装g++时,指定了prefix,那么内定搜索⽬录就是:

Prefix/include

Prefix/local/include

Prefix/lib/gcc/--host/--version/include

编译时可以通过-nostdinc++选项屏蔽对内定⽬录搜索头⽂件。

库⽂件:

编译的时候:

①gcc会去找-L

②再找gcc的环境变量LIBRARY_PATH

③再找内定⽬录/lib /usr/lib/usr/local/lib 这是当初compilegcc时写在程序内的(不可配置的?)

运⾏时动态库的搜索路径:

动态库的搜索路径搜索的先后顺序是:

①编译⽬标代码时指定的动态库搜索路径(这是通过gcc 的参数"-Wl,-rpath,"指定。当指定多个动态库搜索路径时,路径之间⽤冒号":"分隔)

②环境变量LD_LIBRARY_PATH指定的动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间⽤冒号":"分隔)

③配置⽂件/etc/ld.so.conf中指定的动态库搜索路径;

④默认的动态库搜索路径/lib;

⑤默认的动态库搜索路径/usr/lib。

(应注意动态库搜寻路径并不包括当前⽂件夹,所以当即使可执⾏⽂件和其所需的so⽂件在同⼀⽂件夹,也会出现找不到so的问题,类同#include<header_file>不搜索当前⽬录)

5

百度文库VIP限时优惠现在开通,立享6亿+VIP内容

立即获取

linux系统编译C++程序时头文件和库文件搜索路径

linux系统编译C++程序时头⽂件和库⽂件搜索路径

C++编译时,教科书中写道:#include “headfile.h”优先在当前⽬录查找头⽂件;#include <headfile.h>从系统默认路径查找头⽂件。先

前以为系统默认路径是环境变量$PATH指定的路径,在系统上⼀查,傻了眼:

-bash-3.2$ echo$PATH

/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/java/j2re1.4.0/bin:/usr/atria/bin:/ccase/bin:/home/devcomp

第 1 页

全是bin⽬录,$PATH是运⾏可执⾏⽂件时的搜索路径,与include头⽂件的搜索路径⽆关,可能不少⼈犯了我这样的错误。

头⽂件:

1. #include“headfile.h”

搜索顺序为:

①先搜索当前⽬录

②然后搜索-I指定的⽬录

③再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使⽤的是C_INCLUDE_PATH)

展开全文

限免

导长图

转存到网盘

发送至微信

下载文档

北京百度网讯科技有限公司 版本号8.0.70


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8976291.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存