cmake 链接target_link_libraries(testsoci PRIVATE SOCI::soci_core SOCI::soci_oracle clntsh nnz21) 没问题,但是运行报错 error while loading shared libraries: libclntsh.so.21.1: cannot open shared object file: No such file or directory
时间: 2023-07-02 20:19:39 浏览: 178
这个错误通常是因为系统无法找到 Oracle Instant Client 库文件 `libclntsh.so.21.1`。解决方法如下:
1. 确认库文件路径:首先检查库文件实际存在的位置。如果你已经安装了 Oracle Instant Client,在命令行中运行 `ls /usr/lib/oracle/`,应该会列出 Instant Client 的版本号,例如 `instantclient_21_1`。然后运行 `ls /usr/lib/oracle/instantclient_21_1/`,确认 `libclntsh.so.21.1` 等库文件是否存在。
2. 设置库文件路径:如果库文件存在,但系统仍然无法找到它们,请检查 `LD_LIBRARY_PATH` 环境变量是否正确设置。该变量应该包含 Oracle Instant Client 库文件所在的目录。例如,在命令行中输入以下命令:
```
export LD_LIBRARY_PATH=/usr/lib/oracle/instantclient_21_1:$LD_LIBRARY_PATH
```
这将把 Instant Client 库文件所在的目录添加到 `LD_LIBRARY_PATH` 中。如果你希望将此更改永久保存,请将其添加到 `~/.bashrc` 文件中。
3. 重新运行程序:如果你已经完成了上述步骤,尝试重新运行需要链接 Oracle 库的程序,看看是否能够正常启动。
如果你仍然遇到问题,可以在运行程序之前使用 `ldd` 命令查看程序依赖的库文件列表,以确保所有依赖的库文件都正确安装和配置。例如,运行以下命令:
```
ldd your_program_name
```
将 `your_program_name` 替换为你要运行的程序名称。
希望这些步骤可以帮助你解决这个错误。
阅读全文