在Ubuntu 12.04或Springdale 6.4上使用gcc和g++编译时,C_INCLUDE_PATH(或CPLUS_INCLUDE_PATH)和LD_LIBRARY_PATH有什么区别? LD是只在运行时使用,另外两个是只在编译时使用吗?由于在这些操作系统上,GCC似乎会忽略INCLUDE和LIBRARY_PATH环境变量,因此我应该设置哪个变量来构建我的~/.bashrc文件,使其在现代Linux操作系统中尽可能地可移植(除了实际路径的更改)?
LD_LIBRARY_PATH是一个环境变量,它告诉dll加载器在启动可执行文件时应查找哪些目录中的动态库。该变量是危险且已被弃用。
LIBRARY_PATH - 在构建exe或lib时告诉链接器在哪里查找库 INCLUDE_PATH - 告诉编译器在 #include 语句中引用的文件在哪里查找
无论如何,LIBRARY_PATH和INCLUDE_PATH应在特定的构建系统中设置,而不是在bashrc中设置。脚本越容易构建c源文件,你的电脑就越有可能感染rootkit(恶意软件)。
顺便说一下: gcc是一个包装器,它调用适当的编译器(例如cc或g++)和链接器。 g ++是gnu c ++编译器
编辑 解释为什么LD_LIBRARY_PATH是危险的。
我已经好几年没有使用Linux了,我想知道这个环境变量是否仍存在于当前的发行版中。当我使用Linux时(大约在2006年左右),它被视为已弃用,因为它提供了非常容易被利用的钩子。
问题在于它规定了ld.so - 动态链接器查找所需库的路径顺序。如果LD_LIBRARY_PATH包含一个可写目录,黑客(现在称为网络犯罪分子)可以在该目录中放置一个名称类似于在系统目录中找到的库文件(例如/usr/lib)的库文件。该库文件可以首先执行任何不良操作,然后调用原始库文件。利用LD_LIBRARY_PATH比攻击系统目录中的二进制文件要容易得多。此外,这种攻击方式很难被检测出。
LD_LIBRARY_PATH
已被弃用。你能提供一个更好的参考吗?因为我没有从你链接的文章中理解到这一点。 - CB Bailey