在 Mac OS X Sierra (CoolProp) 上设置 DYLD_LIBRARY_PATH
Setting DYLD_LIBRARY_PATH on Mac OS X Sierra (CoolProp)
免责声明:这个问题开始于 GitHub issue。
问题
我会把 the X question 放在前面:
有谁知道 DYLD_LIBRARY_PATH
的设置方式 Excel 2016 会在 MacOS Sierra 上识别?
实际问题(Y):CoolProp 的开发者(else)如何允许他们的动态库在Excel中使用?
背景
我正在尝试为 Mac 获取 Excel 2016,以使用 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
due to SIP, one can no longer set any environment variable which starts with DYLD_
是也不是。 SIP 保护 Apple 二进制文件不受 DYLD_
影响; Microsoft 的 Excel 不受 SIP 保护,DYLD_INSERT_LIBRARIES
可以正常工作。
我们怎么知道的?
有一个库 libGMalloc.dylib
可用于监视应用程序的调试分配。从终端执行以下命令:-
DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib /Applications/Microsoft\ Excel.app/Contents/MacOS/Microsoft\ Excel
您会看到 Excel 已启动并运行,但比平时慢一点,这是由于插入的库忙于监视所有内存分配的开销。
另外,使用Activity监控,查看Excel进程的打开文件,可以清楚的看到libGMalloc.dylib被插入到其进程中
我建议使用 DYLD_INSERT_LIBRARIES
而不是 DYLD_LIBRARY_PATH
并从命令行引用 Coolprop 库,如此处所示。
免责声明:这个问题开始于 GitHub issue。
问题
我会把 the X question 放在前面:
有谁知道 DYLD_LIBRARY_PATH
的设置方式 Excel 2016 会在 MacOS Sierra 上识别?
实际问题(Y):CoolProp 的开发者(else)如何允许他们的动态库在Excel中使用?
背景
我正在尝试为 Mac 获取 Excel 2016,以使用 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
due to SIP, one can no longer set any environment variable which starts with DYLD_
是也不是。 SIP 保护 Apple 二进制文件不受 DYLD_
影响; Microsoft 的 Excel 不受 SIP 保护,DYLD_INSERT_LIBRARIES
可以正常工作。
我们怎么知道的?
有一个库 libGMalloc.dylib
可用于监视应用程序的调试分配。从终端执行以下命令:-
DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib /Applications/Microsoft\ Excel.app/Contents/MacOS/Microsoft\ Excel
您会看到 Excel 已启动并运行,但比平时慢一点,这是由于插入的库忙于监视所有内存分配的开销。
另外,使用Activity监控,查看Excel进程的打开文件,可以清楚的看到libGMalloc.dylib被插入到其进程中
我建议使用 DYLD_INSERT_LIBRARIES
而不是 DYLD_LIBRARY_PATH
并从命令行引用 Coolprop 库,如此处所示。