dyld:未加载库 - sqlplus 安装

dyld: Library not loaded - sqlplus installation

我想在我的 Mac 上安装 sqlplus。所以,首先我从这个 link 下载了两个文件 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

为什么?如何解决?

非常感谢!

错误表明您的 ~/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 文件,这样你就不会以后不必手动执行此操作。

19c 引入了签名的 DMG 包,安装发生了变化。 见 Notarized macOS Oracle Instant Client Packages Make Installation Easier:

  • Oracle 下载所需的 DMG 包。

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

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

    $ 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 包

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

如有疑问,请按照您从中下载 Instant Client 的页面上的 installation instructions 进行操作。

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

确定:

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

如果按照 Oracle 的说明和此处的答案(包括我的和其他人的)失败了,请不要难过。没有办法预测所有可能出错的方式。把这样的东西留给用户是个糟糕的主意。至少 Oracle 可以使用 SQLPlus 打包所有库(并再次使用需要它们的 each 工具)。这可能是一个“腰部”,但在 CS 中有一个 space/time 权衡......我们都可以为腰部 246MB [=] 节省 LOT 时间 space 在我们的 TB 硬盘上。如果我们有多个工具,我们可以通过简单地合并目录来恢复 space。