linux下c++include的那些文件来自哪里

linux下c++include的那些文件来自哪里,第1张

编译C++时include的那些头文件是由编译器决定路径及寻找顺序的,/usr/include这种肯定在编译器寻找的路径内。如果不在编译器指定路径内,则需要手动使用-I选项指定头文件路径

程序只是在编译时需要用到这些头文件,链接时直接链接dll,需要用-l选项指定需要链接哪些so文件,指定链接文件名时省略前面的lib与后面的so,比如链接libpartedso(这是一个与磁盘分区相关的共享库)应该写为 -lparted。

例子:

g++ testcpp -I/home/ -ldl -o test

是指编译testcpp源程序,这个源程序include进来的头文件可以先去/home/文件夹下查找,如果没有再去系统路径(就是你前面说的/usr/include这样的)下查找。链接阶段请链接上libdlso这个共享库,最后生成的可执行文件叫test

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

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

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

-bash-32$ echo$PATH

/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/java/j2re140/bin:/usr/atria/bin:/ccase/bin:/home/devcomp

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

头⽂件:

1 #include“headfileh”

搜索顺序为:

①先搜索当前⽬录

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

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

④最后搜索gcc的内定⽬录

/usr/include

/usr/local/include

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

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

2 #include<headfileh>

①先搜索-I指定的⽬录

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

③最后搜索gcc的内定⽬录

/usr/include

/usr/local/include

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

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

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

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

-bash-32$ 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-142-gcj-1420/jre--with-cpu=generic --host=x86_64-redhat-linux

Thread model:posix

gcc version 412 20080704(Red Hat 412-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/ldsoconf中指定的动态库搜索路径;

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

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

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

5

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

立即获取

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

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

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

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

-bash-32$ echo$PATH

/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/java/j2re140/bin:/usr/atria/bin:/ccase/bin:/home/devcomp

第 1 页

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

头⽂件:

1 #include“headfileh”

搜索顺序为:

①先搜索当前⽬录

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

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

展开全文

限免

导长图

转存到网盘

发送至微信

下载文档

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

很多内嵌编译器的编辑工具,比如VC 在开始的时候都会建一个project,然后编译的时候会编译所有project的文件

这对初学者有很大的帮助,减少了不少麻烦,但是也会弄不清到底是怎么联系起来的

其实这些工具都会生成一个类似于makefile的东西,然后把所有的c,h文件关联起来,按照一定的方式进行管理编译

如果想详细了解一下,可以看看gnu makefile的相关文档

很高兴能回答你的问题 答案如下:

1首先,在易语言的上方的菜单里面找到工具选项

2然后 选到 系统配置-在里面找到“编译”这个选项,接着在“非独立编以后是否询问写出相关库”打钩,然后确认。就ok了!如果我的答案符合你的提议,请选我吧

一、clamav源代码编译与库文件获取

1、安装zlib(clamav编译中会用到):

tar -zxvf zlib-123targz

cd zlib-123

/configure

make

make install (zlib 编译安装)

2、clamav的编译与安装

tar -zxvf clamav-0952targz (解压)

cd clamav-0952 (进入目录)

/configure --prefix=/home/local/clamav (设置安装目录,便于查找)

make (编译)

make install (安装到指定目录下)

3、提取头文件,库文件

完成1、2之后可以在/home/local/clamav目录下有bin,etc,include,lib64,logs,sbin,share和updata文件夹。bin中是可以一些可以直接运行的官方程序,我们这里是讨论的使用clamav提供的接口,开发具有病毒查杀功能的软件,所以不会用到这些软件。

在include中的clamavh文件,这是我们开发时需要包含的头文件。

lib64是编译时需要包含的库目录(在makefile中包含库目录-L $(CLAMAV_ROOT)/lib64 –lclamav)。

4、运行时需要的文件

运行时使用的动态库名为libclamavso6,不过在lib64里的libclamavso6是一个连接文件指向libclamavso。为了在非编译系统中使用开发出的软件时方便,不妨将libclamavso更名为libclamavso6并放到该系统的/lib64目录下。

另外在运行软件的开始需要加载病毒库maincvd、dailycvd和bytecodecvd。可在clamav官方下载病毒库文件。病毒库所在的目录位置需要在软件中加载。

更详细信息请访问本人博客:>

2种方法:

方法1,把文件放入你c:\\documents and setting\\administration下,然后关闭dos窗口重新打开输入命令javac

方法2,在dos窗口中输入c:回车,cd desktop 回车 进入你的桌面文件夹然后再输入javac编译

希望能帮助到你。

以上就是关于linux下c++include的那些文件来自哪里全部的内容,包括:linux下c++include的那些文件来自哪里、linux编译的c++程序位置、在编译器里面添加很多c文件,这些c文件是怎么联系起来的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9709046.html

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

发表评论

登录后才能评论

评论列表(0条)

保存