Stata 没有看到 ODBC 连接所需的环境变量

Stata is not seeing environment variables needed for ODBC connection

我使用 Simba ODBC 驱动程序 (2.3.2) 从我的 macOS 笔记本电脑将 Stata 连接到 BigQuery。我最近升级到 Big Sur (11.2.1) 并失去了执行此操作的能力。

我正在使用 iODBC,并且能够成功测试 DSN。我也能够在 macOS 10.15.7 中正常工作(在另一台机器上)。

问题似乎是 Stata 没有看到我根据驱动程序配置说明在我的 .bash_profile 配置文件中定义的 DYLD_LIBRARY_PATH 环境变量。

在 Stata 中,我得到这个错误:

. odbc list
The ODBC file libiodbc.dylib could not be found on this system.
Setting the unix LD_LIBRARY_PATH environment variable may correct this error.
r(680);

我可以在 bash 中进行设置:

$ echo $DYLD_LIBRARY_PATH
:/usr/lib/:/usr/local/

但这似乎不起作用,因为:

$ printenv | grep 'DYLD'
 

为空。我怀疑 Big Sur 中的某些东西正在阻止设置此环境变量。

很高兴尝试解决此问题。

要解决此问题,您需要禁用 SIP,这会阻止 $DYLD_LIBRARY_PATH 环境变量在不发出警告的情况下被定义。

要禁用 SIP:

  1. 关机后按住 Command(⌘)-R 以恢复模式重新启动计算机。按住直到看到 Apple 图标和进度条。
  2. 从“实用程序”菜单,select 终端。
  3. 在提示符下,键入以下命令,然后按 return:csrutil disable
  4. 终端应显示 SIP 已禁用的消息。
  5. 从 Apple 菜单,select 重新启动。

现在您需要定义一个指向libiodbc.dylib文件夹的环境变量。要找出该文件夹的位置,请在终端中键入:

find / -name libiodbc.dylib 2>&1 | grep -v "find: "

使用您最喜欢的文本编辑器(如 pico、emacs 或 vi),您需要编辑 .zshenv 文件。使用

打开此文件(如果不存在则创建它)

pico ~/.zshenv

使用上面的第一个文件夹,通过在文件中键入以下内容来定义环境变量:

export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:<FOLDER-PATH-HERE>

保存并退出文本编辑器。

要将更改应用于当前 shell,请键入 source .zshenv

这应该会让 Stata 和 BQ 再次发挥出色。

zsh 是从 Catalina 开始的默认 shell,因此如果您使用另一个 shell,您应该相应地进行修改。我自己使用 bash,但我希望我对 zsh 的翻译能奏效。

您可能需要从命令行启动 Stata 才能完全正常工作。 这是上述修复后命令的输出:

我得到这个在 Apple Silicon/Monterey 上工作。在某些时候,Apple 推出了 SIP (https://support.apple.com/en-us/HT204899) 并且环境变量 LD_LIBRARY_PATH 不再可访问,因此 STATA 无法找到 .dylib 文件。

不要禁用 Apple 强烈反对的 SIP,而是从命令行加载 STATA 并在同一命令中设置 LD_LIBRARY_PATH

类似这样(您的路径和 STATA 版本可能不同)


export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/homebrew/lib/ && \
/Applications/Stata/StataIC.app/Contents/MacOS/StataIC &