dyld:未加载库 - sqlplus 安装
dyld: Library not loaded - sqlplus installation
我想在我的 Mac 上安装 sqlplus。所以,首先我从这个 link 下载了两个文件
https://www.oracle.com/technetwork/topics/intel-macsoft-096467.html 这两个文件:
instantclient-basic-macos.x64-18.1.0.0.0.zip
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。
我想在我的 Mac 上安装 sqlplus。所以,首先我从这个 link 下载了两个文件 https://www.oracle.com/technetwork/topics/intel-macsoft-096467.html 这两个文件:
instantclient-basic-macos.x64-18.1.0.0.0.zip
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。