【发布时间】:2017-03-30 14:57:51
【问题描述】:
免责声明:此问题以GitHub issue 开头。
问题
我会把the X question 放在前面:
有谁知道以 Excel 2016 可以在 MacOS Sierra 上识别的方式设置 DYLD_LIBRARY_PATH 的方法吗?
实际问题(Y):CoolProp 的开发者如何(否则)允许他们的动态库在 Excel 中使用?
背景
我正在尝试让 Excel 2016 for Mac 使用 these instructions 识别 CoolProp 插件,这基本上归结为使用此 startup.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>my.startup</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>launchctl setenv DYLD_LIBRARY_PATH "/Users/$USER/Library/Group Containers/UBF8T346G9.Office"</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
将DYLD_LIBRARY_PATH 设置为Excel 可以访问动态库并将libCoolProp.dylib 文件复制到同一目录的位置。不幸的是,由于 SIP,似乎无法再设置任何以 DYLD_ 开头的环境变量。
为了验证这一点,我构建了一个测试电子表格,其中包含此 VBA 函数和单元格 A1 中的=ENV("DYLD_LIBRARY_PATH")。
Public Function Env(Value As Variant) As String
Env = Environ(Value)
End Function
我观察到这种行为:
$ launchctl setenv DYLD_LIBRARY_PATH "/Users/${USER}/Library/Group Containers/UBF8T346G9.Office"
$ launchctl getenv DYLD_LIBRARY_PATH # empty output
$ launchctl setenv DYLDLIBRARYPATH "/Users/${USER}/Library/Group Containers/UBF8T346G9.Office" # Same kind of thing, but no underscores
$ launchctl getenv DYLDLIBRARYPATH # works fine
/Users/alchemyst/Library/Group Containers/UBF8T346G9.Office
在我的终端中运行这一系列命令并重新启动 Excel 后,我可以使用测试电子表格检索“DYLDLIBRARYPATH”的内容。我还编辑了 startup.plist 并获得了类似的结果。我似乎遵循了所有正确的步骤,但是当我调用 setenv 时,似乎根本没有设置“DYLD_*”。如果我以 root 身份执行,结果是一样的。
所以基本上我正在寻找仍然可以在 Mac 上使用此插件的任何方式。
版本:MacOS Sierra (10.12.3)、Excel 2016 (15.32)、CoolProp 6.10
【问题讨论】: