- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个打印环境变量的简单控制台应用程序:
int main(int argc, char **argv, char **envp)
{
printf("Scanning for LD_LIB_PATH\n");
for (char **env = envp; *env != 0; env++)
{
char *thisEnv = *env;
std::string s= *env;
if (s.find("LD_LIBRARY_PATH")!=std::string::npos)
{
printf("!!!!!!! %s\n", thisEnv);
}
printf("%s\n", thisEnv);
}
}
在运行可执行文件之前,我运行设置 LD_LIBRARY_PATH
的脚本
export LD_LIBRARY_PATH=~/aaa/bbb/Debug:~/ccc/ddd/Debug
echo "searching:"
export | grep LD_LIBRARY
echo "done"
脚本运行良好,输出:
exporting
searching:
declare -x LD_LIBRARY_PATH="/home/vicp/aaa/bbb/Debug:/home/vico/ccc/ddd/Debug"
done
我运行可执行文件,它发现许多变量但没有环境变量 LD_LIB_PATH
。为什么?
更新
按照建议,我编写了 脚本。 ./script.sh
然后用命令仔细检查:
export |grep LD_LIBRARY_PATH
得到输出:
declare -x LD_LIBRARY_PATH="/home/vicp/aaa/bbb/Debug:/home/vico/ccc/ddd/Debug"
但在我的程序中仍然看不到 LD_LIBRARY_PATH
。
最佳答案
根据您运行脚本的方式,env 变量只会添加到运行脚本的子 shell 的环境中。
如果你像这样运行脚本:
$ ./script.sh
这将生成一个新的 shell,脚本将在其中运行。父 shell,即您从中启动脚本的 shell,不会受到脚本的影响。因此,对环境的更改将不可见(更改工作目录或类似操作也将不起作用)。
如果脚本旨在修改当前 shell 的环境,则需要使用 .
或 source
命令获取脚本:
$ . ./script.sh
$ source ./script.sh
来自 bash 中的 help source
:
Execute commands from a file in the current shell.
那么代码好像有问题:
正如评论者之前所说,成功案例printf
中有很多感叹号。我认为这些是为了突出显示找到的变量名称。由于它们位于格式字符串的左引号之外,因此它们被解释为逻辑非运算符。
结果是格式字符串文字(指针)被取反,由于运算符的数量导致false
。这通常映射到 0,这意味着格式字符串变为空指针。将空指针作为格式字符串传递给 printf
时会发生什么,据我所知,取决于实现。如果它没有崩溃,它肯定不会打印任何东西。
因此代码可能确实有效,但由于该错误,没有可见的输出。要修复它,请将感叹号移到格式字符串中,即在左引号之后。
关于c++ - 显示环境变量 LD_LIBRARY_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994228/
在编译和链接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 来运行我的二进制文件,因为我没有(也无法获得)许可。 我需要对此进行快速修复,以
我是一名优秀的程序员,十分优秀!