【问题标题】:dyld: Library not loaded - sqlplus installationdyld:库未加载 - sqlplus 安装
【发布时间】:2019-10-16 23:45:34
【问题描述】:

我想在我的 Mac 上安装 sqlplus。所以,首先我从这个链接下载了两个文件 https://www.oracle.com/technetwork/topics/intel-macsoft-096467.html这两个文件:

  1. instantclient-basic-macos.x64-18.1.0.0.0.zip

  2. instantclient-sqlplus-macos.x64-18.1.0.0.0.zip

然后,我将这些 files.zip 移动到我的桌面和终端上 我写了这些命令:

unzip /Users/nietmochi/Desktop/instantclient-basic-macos.x64-18.1.0.0.0.zip

unzip /Users/nietmochi/Desktop/instantclient-sqlplus-macos.x64-18.1.0.0.0.zip

然后:

export PATH=/Users/nietmochi/Desktop/instantclient_18_1:$PATH

和:

which sqlplus

现在,当我尝试使用命令 sqlplus 启动 sqlplus 时,我收到以下消息:

dyld: Library not loaded: @rpath/libclntsh.dylib.18.1
  Referenced from: /Users/nietmochi/Desktop/instantclient_18_1/sqlplus
  Reason: image not found
Abort trap: 6

为什么?如何解决?

非常感谢!

【问题讨论】:

    标签: installation sqlplus oracleclient


    【解决方案1】:

    错误提示您的~/Desktop/instantclient_18_1 目录 包含instantclient-sqlplus-macos.x64-18.1.0.0.0.zip 文件的内容。我怀疑你已经在不同的地方尝试了几次,结果你得到了部分安装和完整安装的混合,而你碰巧选择了部分安装。

    当你这样做时:

    unzip /Users/nietmochi/Desktop/instantclient-basic-macos.x64-18.1.0.0.0.zip
    unzip /Users/nietmochi/Desktop/instantclient-sqlplus-macos.x64-18.1.0.0.0.zip
    

    那么两个 zip 档案应该展开到同一个 instantclient_18_1 目录中,该目录将位于您的当前工作目录中。如果您在运行之前没有更改为~/Desktop,那么它可能在任何地方......

    我建议你重新开始。从您的主目录、~/Desktop~/Downloads 等任何您可以找到它们的地方查找并删除任何名为 instantclient_18_1 的目录;主要是为了避免混淆。

    然后,由于您的 zip 文件当前在桌面上,为了简单起见,现在这样做:

    cd ~/Desktop
    unzip instantclient-basic-macos.x64-18.1.0.0.0.zip
    ls instantclient_18_1 | wc -l
    unzip instantclient-sqlplus-macos.x64-18.1.0.0.0.zip
    ls instantclient_18_1 | wc -l
    

    第一个 ls 应该给你 18 个文件的计数。第二个应该为您提供 23 个文件的计数。

    一旦你这样做了,那么sqlplus 应该可以工作了,使用你已经修改过的PATH

    您可以将 instantclient_18_1 目录放在您想要的任何位置,只要您的 PATH 引用它,您可以添加设置路径到您的 ~/.bash_profile 文件,这样您就不必手动执行此操作未来。

    【讨论】:

    【解决方案2】:

    随着 19c 引入了签名的 DMG 包,安装已更改。 见Notarized macOS Oracle Instant Client Packages Make Installation Easier

    • Oracle下载所需的DMG包。

    • 在 Finder 中,双击所有需要的 Instant Client .dmg 包以安装它们

    • 打开一个终端窗口并将目录更改为其中一个包,例如:

      $ cd /Volumes/instantclient-basic-macos.x64-19.8.0.0.0dbru
      
    • 运行 install_ic.sh 脚本:

      $ ./install_ic.sh
      

      这会将所有当前安装的 Instant Client .dmg 包的内容复制到 $HOME/Downloads/instantclient_19_8

    • 如果你挂载了多个 DMG 包,你只需要运行一次install_ic.sh

    • 在 Finder 中,弹出安装的 Instant Client 包

    如果您想要一个自动下载和安装的脚本,请参阅博文Notarized macOS Oracle Instant Client Packages Make Installation Easier

    如有疑问,请关注您下载 Instant Client 页面上的installation instructions

    【讨论】:

    • 您不再需要该步骤,最近的版本使用相对路径正确构建,因此它不会尝试使用库路径或必须具有固定位置。
    • 公平点,但其他工具(例如我们所有基于 ODPI-C 的驱动程序,如 Python cx_Oracle)仍然需要库搜索路径集,所以我称之为最佳实践。
    • 我更新了答案以删除一些过时的步骤。
    • 这不回答 OP。事实上,我遵循了这些确切的步骤,得到了与 OP 相同的错误。
    【解决方案3】:

    问题在于instantclient-sqlplus 的依赖项位于不同的包中,即instantclient-basic。必须注意该包中的所有文件实际上都与instantclient-sqlplus 包位于同一目录中。通常,像这样的依赖项是自动管理的。 Oracle,出于某种原因,可能反映在他们的名字中,决定将所有这些依赖项拆分到多个包中,并要求您(或我们)自己管理它们(以及它们的安装)!这有很大的错误空间。

    确定:

    • 这些包属于同一类型(不能混合使用 zip 和 dmg,但 OP 似乎没有这样做),
    • 您的unzip 程序没有覆盖它提取文件的目录,
    • 第一次执行后,您进入系统偏好设置并授予可执行文件和库执行权限(这可能需要几轮才能获得所有库),
    • 系统偏好设置允许来自“App Store 已识别的开发人员”的可执行文件(我不确定这有多么必要,但过去这在某些情况下对我很有用),
    • 将 PATH 设置为具有安装 sqlplus 和所有库的目录的绝对路径。

    如果您在此处遵循 Oracle 的说明和答案(包括我的和其他人)失败了,请不要感到难过。没有办法预测这可能出错的所有方式。把这样的东西留给用户是一个糟糕的主意。至少 Oracle 可以使用 SQLPlus 打包所有库(并且再​​次使用需要它们的 each 工具)。这可能是一个“腰部”,但在 CS 中存在空间/时间折衷……我们都可以为 TB 级硬盘驱动器上的 246MB 腰部空间节省 很多 时间。如果我们有多个工具,我们可以通过简单地合并目录来恢复该空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多