7

在 Ubunutu 12.04 或 Springdale 6.4 上,使用 gcc 和 g++,C_INCLUDE_PATH(or CPLUS_INCLUDE_PATH) 和之间有什么区别LD_LIBRARY_PATH?一个LD只在运行时使用,另外两个只在编译时使用?

由于 GCC 在这些操作系统上似乎忽略了INCLUDELIBRARY_PATH环境变量,我应该在构建 ~/.bashrc 文件时设置它以使其在现代 Linux 操作系统中尽可能可移植(实际路径中的模变化)?

4

1 回答 1

5

LD_LIBRARY_PATH 是一个环境变量,它告诉您启动可执行文件时 dll 加载器应该在哪些目录中查找动态库。该变量很危险且已弃用

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

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

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

编辑 解释,为什么 LD_LIBRARY_PATH 很危险。

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

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

于 2013-08-14T20:45:30.740 回答