c_include_path vs ld_library_path
c_include_path vs ld_library_path
在Ubunteu 12.04或Springdale 6.4上,使用gcc和g++,C_INCLUDE_PATH
(或CPLUS_INCLUDE_PATH
)和LD_LIBRARY_PATH
之间有什么区别?LD
是否仅在运行时使用,其他两个仅在编译时使用?
由于INCLUDE
和LIBRARY_PATH
环境变量在这些操作系统上似乎被GCC忽略了,所以在构建~/.bashrc文件时,我应该设置哪个,以使其在现代Linux操作系统中尽可能地可移植(实际路径中的模更改)?
LD_LIBRARY_PATH是一个环境变量,当您启动可执行文件时,它告诉dll加载程序应该在哪些目录中查找动态库。该变量很危险,已弃用
LIBRARY_PATH-告诉链接器在生成exe或lib时也要查找库的位置INCLUDE_PATH-告诉在哪里查找#INCLUDE语句中引用的文件
在任何情况下,都应该在特定的构建系统中设置LIBRARY_PATH和INCLUDE_PATH,而不是在bashrc中。脚本越容易构建c源,你的电脑感染rootkit的可能性就越大。
BTW:gcc是一个包装器,它调用适当的编译器(例如cc或g++)和链接器。g++是gnu c++编译器
编辑解释为什么LD_LIBRARY_PATH是危险的。
我已经有几年没有使用Linux了,我想知道这个env变量是否仍在当前的发行版中。当我使用Linux(大约在2006年)时,它被认为是不推荐使用的,因为它提供了非常容易利用的钩子。
它的问题是,它规定了ld.so动态链接器查找所需库的路径顺序。如果LD_LIBRARY_PATH包含一个可写目录,黑客(在新的语音中是网络罪犯)可以在该目录中放置一个名称可能在系统目录(例如/usr/lib)中找到的库。这个库可以先做任何肮脏的工作,然后调用原始库。利用LD_LIBRARY_PATH要比破坏系统目录中的二进制文件容易得多。而且这种漏洞也很难被发现。
- Boost Graph Library,修复节点大小
- SFML library: http request
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 解决"ld: library not found for -ltensorflow_framework.2.3.0"
- Linking library C++
- 在VS2019项目中集成ImageMagick:x64-windows-static library
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- C++ class vs a library
- C++ library with Tensorflow on Android
- CMake:尝试在 Jenkins 构建机器上运行时出现"Linked Library"错误 (0xc0000135)
- 将 c++ cmake-library 构建发布到本地存储库时出现 Gradle 错误
- 如何强制嵌入式python使用与命令行相同的sys.path?
- 为什么'allocate in one library and free in the other'是错误的
- 链接 library.lib 使用 setup.py.
- [LLVM-9 clang-9 OSX]: std::filesystem::path unrecognized
- 目标提升::<library>已经有导入的位置 + 链接错误
- 线程中的异常 "main" java.lang.UnsatisfiedLinkError: no JNTIest in java.library.path
- JNI本机:java.lang.UnsisfiedLinkError:java.library.path中没有Hello
- Minecraft启动器:java.library.path中没有lwjgl
- 线程"main" java.lang.UnsatisfiedLinkError: java.library.path 中没有libopencv_java247