linux编译的c++程序位置

linux编译的c++程序位置,第1张

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

一般来说是放在/usr/include目录下的;

但是这个并不局限也是可控的,如果我们进行开发过程中, 就会在内核的库函数文件目录:

例如在:/XXX/XXX/linux-X.X/include

所以根据不同的情况,头文件存放的目录也是不同的,具体需要可以根据locate和grep命令进行查询。

C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。

1、#include <stdio.h>,直接到系统指定目录去查找头文件。

系统默认路径为:/usr/include,/usr/local/include,/usr/lib/gcc-lib/i386-Linux/2.95.2/include(gcc库文件的路径,各个系统不一致)

2、#include "stidio.h",会先到当前目录查找头文件,如果没找到在到系统指定目录查找。

3、gcc编译时查找头文件,按照以下路径顺序查找:

gcc编译时,可以设置-I选项以指定头文件的搜索路径,如果指定多个路径,则按照顺序依次查找。比如,gcc -I /usr/local/include/node a.c

gcc会查找环境变量C_INCLUDE_PATH,CPLUS_INCLUDE_PATH中指定的路径。

扩展资料:

应用程序代码编译过程:

编译器根据头文件提供的库函数接口形式,来编译代码,然后生成目标文件;然后,再使用链接器将这个目标文件与系统库链接;最终生成应用程序。代码包含了自己写的内容,还有系统提供好的现成的库函数,整个结合起来才形成一个完整的程序。

库函数的头文件,在编译的时候被使用,而库函数的代码段(库文件),在链接的时候被使用。

example:

应用程序代码在使用一个系统调用的时候,例如printf()函数,需要指定包含的头文件stdio.h;另外,在链接的时候对应的链接libc.a(笔者电脑文件所在目录:/usr/lib/i386-linux-gnu/libc.a)。

总结一下,编写应用程序,需要使用linux系统提供的库函数。具体实现起来,需要头文件和库文件。头文件是需要我们编写应用程序的时候,在源文件开头添加的;而库文件则需要配置编译环境进行指定搜索目录。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存