在Ubunutu 12.04或Springdale 6.4上,使用gcc和g ++,C_INCLUDE_PATH
(或CPLUS_INCLUDE_PATH
)和LD_LIBRARY_PATH
之间有什么区别? LD
仅在运行时使用,而其他两个仅在编译时使用吗?
由于GCC在这些操作系统上似乎忽略了INCLUDE
和LIBRARY_PATH
环境变量,我应该在构造〜/ .bashrc文件时将其设置为尽可能便携(模数)现代Linux操作系统中实际路径的变化?
答案 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比破坏系统目录中的二进制文件要容易得多。而且这种利用很难被发现。