最近在做linux下的c与oralce的操作。为了直接操作oracle数据的内核,是存取的更快,我选择了OCI——oracle提供的c语言接口,来作为开发的工具。

    首先我先查了很多关于OCI提供的函数资料,这些资料如果你有需要联系我,我会发到你的邮箱里:yzzhang.gw.con@163.com这是我的邮箱;

   下面我先说一下在linux用c去操作oracle需要什么样的环境;

  a;oralce的客户端是必须的,

  b;oracle的sdk也是必须的;

  以上两个软件你可以到这个网站去下载:http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

 

  我在的rpm版本的,这样的话,省去了很多的配置环境的过程。

  安装指令: rpm -ivh 你下载的rpm包的名称(要全称)

  安装完以后,在编一个简单的测试代码(这个我就不提供了);

  最后就是最主要的编译了:gcc

  就是这个gcc用去了我2天的时间,其中的参数,令我很头疼,不过,终于搞定:

  gcc指令:gcc -o t -I/usr/include/oracle/10.2.0.4/client -L/usr/lib/oracle/10.2.0.4/client/lib -lclntsh OCITest.c

                              (同文件的路径)                                   (动态库的路径)

 如果,你是默认装,完全可以用我提供的指令。如果你指定了路径,那就必须把路径修改;

 这样的话,你完全可以编译成功。我很高兴,终于编译成功了,但是,令我头疼的还在后面呢。

 我执行程序,出现了错误:error while loading shared libraries: libclntsh.so.10.1: cannot open shared object file: No such file or directory

 我初步分析是动态库的问题,花了2个小时,查查了动态库的有关资料。才知道linux下有一个/ect/ld.so.conf的文件,这个文件是存储动态库路径的。你必须把路径加入到这个文件中:echo "/usr/lib/oracle/10.2.0.4/client/lib ">>/etc/ld.so.conf

 加入完之后,本以为可以执行了,但是还出现错误,在查查了资料,原来还得提交。

  执行:/sbin/ldconfig

  还需要在usr/lib/oracle/10.2.0.4/client 下建立network,然后在network下建立admin,在admin下建立tnsnames.ora,其中tnsnames.ora要修改权限,在root用户下把器改为所有用户的都能执行。chmod 777 tnsnames.ora

  内容如下: 192.168.1.201 =  //名字任意,对应于OCIServerAttach(srvhp,p_err,(text *)"192.168.1.201..)第三个参数
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.201)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = orcl)
      )
    )

  到此,程序完全可以运行,两天的劳动没有白费,希望写出来,能给跟我遇到同样问题的人一点点的提示。

Logo

更多推荐