c_include_path vs ld_library_path

时间:2013-08-14 20:20:22

标签: c++ c gcc include-path

在Ubunutu 12.04或Springdale 6.4上,使用gcc和g ++,C_INCLUDE_PATH(或CPLUS_INCLUDE_PATH)和LD_LIBRARY_PATH之间有什么区别? LD仅在运行时使用,而其他两个仅在编译时使用吗?

由于GCC在这些操作系统上似乎忽略了INCLUDELIBRARY_PATH环境变量,我应该在构造〜/ .bashrc文件时将其设置为尽可能便携(模数)现代Linux操作系统中实际路径的变化?

1 个答案:

答案 0 :(得分:4)

LD_LIBRARY_PATH是一个环境变量,它告诉dll加载器在启动可执行文件时应该在哪些目录中查找动态库。变量是dangerous and deprecated

LIBRARY_PATH - 告诉链接器在构建exe或lib时也查找库 INCLUDE_PATH - 告诉在哪里查找#include语句中引用的文件

在任何情况下,LIBRARY_PATH和INCLUDE_PATH都应该在特定的构建系统中设置,而不是在bashrc中。脚本可以更容易地构建c源,您的PC可能感染rootkit的可能性越大。

BTW:gcc是一个包装器,它调用适当的编译器(例如cc或g ++)和链接器。      g ++是gnu c ++编译器

修改 解释,为什么LD_LIBRARY_PATH是危险的。

我已经使用Linux几年了,我想知道,这个env变量仍然是当前的发行版。当我使用Linux(大约2006年)时它被认为是不赞成的,因为它提供了非常容易利用的钩子。

问题在于,它规定了路径的顺序,其中ld.so - 动态链接器查找所需的库。如果LD_LIBRARY_PATH包含可写目录,则黑客(在新演讲中为网络犯罪分子)可以在该目录中放置一个名称可能在系统目录(例如/ usr / lib)中找到的库。这个库可以先做任何脏工作,然后调用原始库。利用LD_LIBRARY_PATH比破坏系统目录中的二进制文件要容易得多。而且这种利用很难被发现。