【问题标题】:c_include_path vs ld_library_pathc_include_path 与 ld_library_path
【发布时间】:2013-08-16 23:35:45
【问题描述】:

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

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

【问题讨论】:

  • 关于第一个问题,你是对的。
  • 直接在你的 make 文件中定义它们是非常可移植的。

标签: c++ c gcc include-path


【解决方案1】:

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

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 比破坏系统目录中的二进制文件要容易得多。而且这样的漏洞也很难被发现。

【讨论】:

  • 有趣,我不知道 LD_LIBRARY_PATH 已被弃用。您能否提供更好的参考,因为我从您链接的文章中不明白这一点。
  • 知道LD_LIBRARY_PATH 是否仍然不受欢迎?在 HPC 中,environment modules 用于用户空间程序的安装和加载非常常见。
猜你喜欢
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多