1

请任何人节省我的时间。我的应用程序是用 C++ 编写的打开共享对象文件:没有这样的文件或目录我的程序使用 oracle api:- 我的启动服务脚本,它是在 /etc/init.d/sistartup 中编写的:-

#!/bin/sh
# chkconfig: 345 99 10
OWNER=aki

case "$1" in
    'start')
        su $OWNER -c "/home/aki/sis_script/startsis.sh >> /home/aki/sis_script/sistartup.log 2>&1" &
       # touch /var/lock/subsys/sis_engine
        ;;
esac

写在适当用户上的启动脚本是:- /home/aki/script/startsis.sh

  #!/bin/bash
    export TMP=/tmp
    export TMPDIR=$TMP
    export PATH=/usr/sbin:/usr/local/bin:$PATH
    # Start db_test
    ./home/aki/summ/db_test

我的 c++ 示例 test_db.cpp 应用程序如下所示:-

    #include <iostream>
    #include <occi.h>
    #include <string>
    using namespace oracle::occi;
    using namespace std;
    Environment *env;
    Connection  *con;
    int main(){

            string user;
            string passwd;
            string db;
            user ="sis";
            passwd = "sis10";
            db = "localhost:1521/sisdba";
            env = Environment::createEnvironment((Environment::Mode)(Environment::OBJECT|Environment::THREADED_MUTEXED));
                    con = env->createConnection(user, passwd, db);
                    while(1){
                        cout<<"Here i have some business which is related to oracle database "<<endl;
                    }
                    return 0;
}

以这种方式编译文件后

g++ -o db_test test_db.cpp -I$ORACLE_HOME/rdbms/public -L$ORACLE_HOME/lib -locci -lclntsh

我看到这个错误:-加载共享库时出错:libocci.so.11.1:无法打开共享对象文件:没有这样的文件或目录

4

2 回答 2

1

如果您必须-L$ORACLE_HOME/lib在构建命令行上提供,这表明库不在系统的任何库路径中,因此在运行时不会自动找到它们。

LD_LIBRARY_PATH=$ORACLE_HOME/lib您可以在运行程序之前通过设置来确认这个理论;然后它应该可以工作。但是,根据您的要求,这可能只值得一个临时的解决方法(我假设它$ORACLE_HOME是可用的!)。一个更长期的修复可能是将此路径添加到/etc/ld.so.conf,尽管这会影响系统上的所有可执行文件。

最终,您应该遵循库的安装说明。

于 2017-04-06T09:01:34.607 回答
0

libocci.so.11.1安装成功了吗?</p>

于 2017-04-06T08:55:48.183 回答