- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 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 加载程序应该在哪个目录中查找动态库。变量是 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/
在编译和链接C和C++代码时,LTDL_LIBRARY_PATH和LD_LIBRARY_PATH环境变量的作用是什么?另外它们还有什么区别? 谢谢 最佳答案 LTDL_LIBRARY_PATH 为 l
我是 Linux 的新手,刚刚使用带有 ARM64(Aarch64)的 Ubuntu 20.04 在 Oracle 云中设置了一个 VM。 我安装的 python 模块只有在我每次打开终端时都使用以下
我可以为单个应用程序设置 LD_LIBRARY_PATH 吗? 我正在调查系统调用失败,那么有什么方法可以使用 LD_LIBRARY_PATH 设置来设置正确的路径吗? 最佳答案 最简单的方法是创建一
我是 ubuntu 和 python 的新手。当我运行命令 LD_LIBRARY_PATH 时,功能运行良好。 ***sudo LD_LIBRARY_PATH=/binaries/linux/x86_
在 Ubuntu 上运行 GDB 7.4-2012.02 并且遇到我无法在其他平台上复制的奇怪行为。 bash$ export LD_LIBRARY_PATH=my_path bash$ export
构建 snap 包时,包装器脚本会自动将 $SNAP/usr/lib 添加到 LD_LIBRARY_PATH。 在 docker 上构建我的包时,一些库(在本例中为 liblapack 和 libbl
我想将这些文件编译成可执行文件。 //main.c #include #include int main(void){ call_hello_world(); return 0; } //
是否可以更改当前进程的环境变量? 更具体地说,在 python 脚本中,我想更改 LD_LIBRARY_PATH,以便在导入依赖于某些 xyz.so 的模块“x”时,xyz .so 取 self 在
我读了this article recently ,为了好玩,我尝试通过执行以下操作来覆盖 libc printf 函数:- 创建一个使用 printf 打印的可执行文件 这是一个测试(printer
我在centos 6.4上安装了两个版本的python。它带有 python 2.6.6。我在/home/python 中安装了 2.6.2。我的 PATH 变量在路径(/usr/bin/python
我正在修改一个现有脚本,我想在其中检查可执行文件中使用的一组库以及在运行时调用的共享库。我有需要与共享库进行比较的库列表。为了获取共享库,我试图通过提供以下代码来获取 LD_LIBRARY_PATH,
当 git 给出以下错误信息时,问题就开始了“致命:无法找到‘https’的远程助手” 为了解决这个问题,我必须先编译 libcurl 来重新编译 git。在编译 git 时,我设置了 CPPFLAG
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是 on-topic用于堆栈溢出。 已关闭10 年前。 Improve t
我想使用 lib.so 运行 C++ 代码并设置“LD_LIBRARY_PATH=/apollo/bazel-bin”,但 lib.so 位于“/apollo/bazel-bin/python”中,然
我正在尝试编译一个使用 zlib 的演示,我想我已经为 LD_LIBRARY_PATH 做了正确的设置,但它不适用于 -lz 标志,你能帮我找出问题所在吗? lisanhu@lisanhu-XPS-1
我有一个打印环境变量的简单控制台应用程序: int main(int argc, char **argv, char **envp) { printf("Scanning for LD_LIB_P
我正在尝试编译一个程序,但在配置检查期间找不到一个库。将我的 .bashrc 文件链接到这个库: LD_LIBRARY_PATH=/usr/lib/:/users/much/needed/libra
我正在为我的应用开发一个简单的插件架构。插件是具有已知“获取接口(interface)”功能的共享对象。我通过 dlopen/dlsym 等访问 .so。相当标准。我的一些插件有额外的 .so 文件也
我写了一个共享对象,比如说libsd.so,我把libsd.so和它的头文件sd.h放在~/lib. 这是另一个使用libsd.so的程序,比如test.c,然后像这样编译它: $ gcc -o te
我正在尝试在无法设置环境变量(无法导出)的远程系统上运行程序。我遇到的问题是我无法设置 LD_LIBRARY_PATH 来运行我的二进制文件,因为我没有(也无法获得)许可。 我需要对此进行快速修复,以
我是一名优秀的程序员,十分优秀!