【问题标题】:MonoDevelop Error - System.DllNotFoundException: libclntsh.soMonoDevelop 错误 - System.DllNotFoundException: libclntsh.so
【发布时间】:2014-04-03 20:03:57
【问题描述】:

我创建了一个使用 Visual Studio 2008 和 OracleClient (OCI) 库连接到 Oracle 11g 数据库的 C# 控制台项目。此代码适用于 Windows。我将整个项目复制到 Linux 并使用 MonoDevelop 4.2.3 打开解决方案。但是在运行项目时,Database Open 调用会抛出异常

    string connectionString = "Data Source=Test; User ID=UID; Password=PWD"
    OracleConnection conn = new OracleConnection()
    conn.ConnectionString = connectionString;
    conn.Open();

例外:

System.DllNotFoundException: libclntsh.so at (wrapper 托管到本地) System.Data.OracleClient.Oci.OciCalls/OciNativeCalls:OCIEnvCreate

libclntsh.so 文件位于 /home/dbuser/instantclient_12_1 下

我已通过在 /home/dbuser/.bashrc 文件中添加以下内容来设置环境变量并重新启动系统。

出口 LD_LIBRARY_PATH=/home/dbuser/instantclient_12_1:$LD_LIBRARY_PATH

但我仍然遇到同样的错误。我找不到将库包含在 MonoDevelop 中的任何选项。

谢谢

【问题讨论】:

    标签: oracle11g mono monodevelop redhat oracleclient


    【解决方案1】:

    看起来 LD_LIBRARY_PATH 环境变量设置不正确或未应用。

    尝试使用以下命令创建额外的链接器配置文件:

    echo /home/dbuser/instantclient_12_1 > /etc/ld.so.conf.d/instantclient.conf
    

    然后以 root 身份使用命令更新链接器缓存:

    ldconfig
    

    重新启动 MonoDevelop 并重试。

    【讨论】:

    • 我从 .bashrc 文件中删除了环境变量并尝试了您的代码,但我仍然收到相同的错误。
    【解决方案2】:

    我已经通过以下操作解决了这个问题

    echo $ORACLE_HOME/lib > /etc/ld.so.conf.d/dbconf.conf

    将 $ORACLE_HOME、$ORACLE_INCLUDE_PATH 和 $ORACLE_LIB_PATH 设置为 /etc/profile.d

    由于某种原因,如果我使用 OCI 客户端库,MonoDevelop IDE 不会选择库 libclntsh.so

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      相关资源
      最近更新 更多