gpt4 book ai didi

c++ - c_include_path 与 ld_library_path

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:39 26 4
gpt4 key购买 nike

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

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

最佳答案

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 年)时,它被认为已被弃用,因为它提供了非常容易利用的 hook。

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

关于c++ - c_include_path 与 ld_library_path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18241517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com