c_include_path 与 ld_library_path

tsb*_*lan 7 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 操作系统中尽可能可移植(实际路径中的模更改)?

Val*_*itz 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,我想知道这个环境变量是否仍在当前发行版中。当我使用 Linux(大约 2006 年)时,它被认为已被弃用,因为它提供了非常容易利用的钩子。

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