- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个我正在尝试运行的简单 C++ 程序,它与我之前构建的 Boost.Thread 库版本相关联。我似乎无法理解运行时库路径在 OS X 上的行为方式。
因为我的 Boost 库没有 RPATH-relative install name ,我正在使用 DYLD_LIBRARY_PATH
环境变量告诉动态链接器在运行时在哪里可以找到 libboost_thread.dylib
。
如果我直接在我的 (bash
) shell 中运行该程序,这会很好地工作:
[~/git/project]$ echo $DYLD_LIBRARY_PATH
/Users/jasonr/git/project/boost/lib
[~/git/project]$ .sconf_temp/conftest_7
[~/git/project]$ # Program runs successfully; this is what I expect.
但是,该程序作为我正在使用的类似于 autoconf
的框架进行的一系列测试的一部分运行。它使用 sh -c
在子 shell 中运行程序。如果我尝试这样做,会发生以下情况:
[~/git/project]$ # Make sure the environment variable is exported to child shells.
[~/git/project]$ export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
[~/git/project]$ # Try to run it in a child shell.
[~/git/project]$ sh -c .sconf_temp/conftest_7
dyld: Library not loaded: libboost_thread.dylib
Referenced from: /Users/jasonr/git/project/.sconf_temp/conftest_7
Reason: image not found
Trace/BPT trap: 5
在这种情况下,就好像环境变量没有传播到 dyld
一样。为什么会出现这种情况?我更熟悉 Linux 上 LD_LIBRARY_PATH
的行为,(我认为)它应该适用于上面的示例。为了完成这项工作,我还需要做些什么吗?
最佳答案
据推测,您正在运行 El Capitan (OS X 10.11) 或更高版本。这是系统完整性保护的副作用。来自System Integrity Protection Guide: Runtime Protections文章:
When a process is started, the kernel checks to see whether the main executable is protected on disk or is signed with an special system entitlement. If either is true, then a flag is set to denote that it is protected against modification. …
… Any dynamic linker (
dyld
) environment variables, such asDYLD_LIBRARY_PATH
, are purged when launching protected processes.
所有系统提供的解释器,包括/bin/sh
,都以这种方式受到保护。因此,当您调用 sh
时,所有 DYLD_* 环境变量都会被清除。
您可以编写一个 shell 脚本来设置 DYLD_LIBRARY_PATH
,然后执行 .sconf_temp/conftest_7
。您可以使用 shell 解释器来执行它——实际上,您必须这样做——并且环境变量会很好,因为清除发生在 protected 可执行文件启动时。基本上,这种方法类似于您问题中的工作示例,但封装在 shell 脚本中。
关于macos - 为什么不在此处传播 DYLD_LIBRARY_PATH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35568122/
我有一个我正在尝试运行的简单 C++ 程序,它与我之前构建的 Boost.Thread 库版本相关联。我似乎无法理解运行时库路径在 OS X 上的行为方式。 因为我的 Boost 库没有 RPATH-
我是 Xcode 和 Mac 环境的新手。我正在使用一些动态和静态库,如 boost、Clucene 等。我有所有的库 MyApp.app/Contents/Resources 我想将此路径设置为应用
我在 OSX 10.9 和 PHP 5.4.19 上使用 Xamppp for macos 我已经安装了 oracle Instantclient,我可以看到 oci8 在 phpinfo 中启用(如
我创建一个 .dylib 文件并编译它: #define _GNU_SOURCE #include #include static void* (*real_malloc)(size_t); vo
我正在使用 openCV 库进行计算机视觉研究,并且在编译时遇到了一些问题,这些问题让我尝试了解操作系统如何将库与源代码链接起来。在互联网上寻找了一段时间以获得良好的概述并阅读 g++/gcc 的手册
要在我的 Mac 上运行 mysql,我总是必须在终端上发送此命令: export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/ 如何解决这个问题? 最佳答案 将其插
我正在使用 Python 2.7 并尝试导入 graph_tool,我的 libboost_thread-mt.dylib 似乎位于/opt/local/lib 而不是/usr/local/lib。
我已经看过两打关于这个问题的帖子,但我太菜鸟了,我不确定如何正确修改所有内容。 我正在尝试完成安装,但是当我转到 Python 并“导入 MySQLdb”时,我最终得到: ImportError: d
免责声明:这个问题始于 GitHub issue . 问题 我会放the X question就在前面: 有谁知道设置DYLD_LIBRARY_PATH的方法以 Excel 2016 将在 MacOS
我有一个 Perl CGI 脚本,当我使用 ./roster_return.cgi StudentID=101095 从命令行运行它时,它工作正常,但是当我在 MAMP (http://localho
我读到一些文章不鼓励使用 DYLD_LIBRARY_PATH,因为动态库的路径应该使用 -install_name、@rpath 和 @loader_path 来固定。 就制作一个同时在 Linux
这是我的: Mac 操作系统 10.11 El Capitan python 2.7.12,从 python.org 安装在 /Library/Frameworks/Python.framework/
在终端中安装 matlab python 包后使用: cd "matlabroot\extern\engines\python" python setup.py install 尝试运行它时,出现段错
在 macOS Sierra 10.12.6 上,环境变量 LD_LIBRARY_PATH os.system() 不能使用, subprocess.run()和 subprocess.Popen()
我是一名优秀的程序员,十分优秀!