Linux下编译Proc程序

需要在linux写简单的Proc程序,资料很少,完成后做简单总结。

中间参考过http://blog.csdn.net/gaogao303/article/details/17303453中的很多内容,表示感谢。

1、 从oracle网站下载以下安装包

注意根据OS版本进行选择64位或者32位。其中sqlplus用于连接测试,可以不装。

oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

oracle-instantclient11.2-precomp-11.2.0.4.0-1.x86_64.rpm

oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm

2、 按照以下顺序安装

先装basic,其他顺序没有限制。

oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

oracle-instantclient11.2-precomp-11.2.0.4.0-1.x86_64.rpm

oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm

如果要ubuntu下安装,要现用alien转成deb后安装。

可能需要先下载alien

apt-get install alien

然后:

alien -i oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
alien -i oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
alien -i oracle-instantclient11.2-precomp-11.2.0.4.0-1.x86_64.rpm
alien -i oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm

3、 设定环境变量

默认安装路径是/usr/lib/oracle,此时如下设定

export ORACLE_HOME=/usr/lib/oracle/11.2/client64/
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib

另外,

ldconfig /usr/lib/oracle/11.2/client64/lib一下已确保动态库路径被更新。

4、 测试

1) 执行proc xx.pc 进行测试。

2) 执行sqlplus64 user/[email protected]:port/DBNAME进行连接测试

xx.pc可用以下代码

5、 Proc设定

环境变量设定好后,proc会默认到ORACLEHOME/precomp/admin下读取配置文件,因此需要引用的头文件路径等,需到此进行配置,如果没有,则从 ORACLE_HOME/lib下面复制一份即可。一般需要追加配置的是linux系统、gcc、和oracle的头文件路径。

1) Centos6.5下追加以下配置通过:

sys_include=/usr/lib/gcc/i686-redhat-linux/4.4.7/include
sys_include=/usr/include/oracle/11.2/client64

2) ubuntu14.04下追加以下配置通过

sys_include=/usr/include/x86_64-linux-gnu
sys_include=/usr/lib/gcc/x86_64-linux-gnu/4.8/include
sys_include=/usr/include/oracle/11.2/client64

pc文件可参照

http://docs.oracle.com/cd/B28359_01/appdev.111/b28427/toc.htm

#include <stdio.h>
#include <string.h>
#include <sqlca.h>
#include <oraca.h>

#include "db.h"

EXEC ORACLE OPTION(ORACA=YES);
int db_connect(const char* connstr)
{
    EXEC SQL BEGIN DECLARE SECTION;
    char uid[256] = {0};
    EXEC SQL END DECLARE SECTION;

    EXEC SQL WHENEVER SQLERROR GOTO ORACLE_ERROR;
    snprintf(uid, sizeof(uid), "%s", connstr);

    // Try to connect to oracle
    EXEC SQL CONNECT :uid;

    printf("Connect to [%s] successful\n", uid);
    return 0;

ORACLE_ERROR:

    EXEC SQL WHENEVER SQLERROR CONTINUE;
    printf("Connect to [%s] failed\n", uid);
    printf("Failed code(%d), message(%s)\n",
            sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);

    return -1;
}

int db_disconnect(void)
{
    EXEC SQL WHENEVER SQLERROR GOTO ORACLE_ERROR;
    EXEC SQL ROLLBACK WORK RELEASE;
    /*
    printf("Disconnect successful\n");
    */
    return 0;

ORACLE_ERROR:
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    return -1;
}

int db_query(const char* name, const char* pass)
{

    EXEC SQL BEGIN DECLARE SECTION;
    char username[128] = {0};
    varchar passwords[128];
    int types = 0;
    EXEC SQL END DECLARE SECTION;

    EXEC SQL WHENEVER SQLERROR GOTO ORACLE_ERROR;
    memset(&passwords, 0, sizeof(passwords));
    snprintf(username, sizeof(username), "%s", name);

    EXEC SQL SELECT PASSWORD, TYPE
            INTO :passwords, :types
    FROM USER
            WHERE NAME = :username;

    printf("----\n");
    printf("USER_NAME = %s\nPASSWORD=%s\nUSER_TYPE=%d\n", username, (char*)passwords.arr, types[0]);
    printf("----\n");

    return 0;

ORACLE_ERROR:
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    return -1;
}
时间: 2024-12-29 11:44:44

Linux下编译Proc程序的相关文章

linux下编译httpd程序

编译httpd程序 使用的程序包 httpd-2.4.25.tar.bz2 环境 Centos7 一: 先用tar工具解压程序包.    二:解压后在目录下可以看到程序包里的文件,我们重点关注的是Makefile.in的模板文件,还有README程序说明文件,以及INSTALL编译方法文件不会编译可以看看里面的说明步骤. 绿色的configure是一个可执行文件.    三: 设置好选项就可以开始了,这里我只设置了安装路径,其他的可按需添加    四:由于是第一次安装,不知道会缺少说明依赖包,我

Linux 下编译C程序的全过程

学习一门语言程序,本人觉得还是得学习它的编译规则,现在,通过小例子小结下自己对C编译的认识. ? 1 2 3 4 5 6 7 8 /*test.c   了解C程序的编译*/ #include <stdio.h> int main(void) {  printf("Hello World!\n");  return 0; } 对于test.c,我们常用一步编译到位的命令是: ? 1 gcc -o test test.c 或者 gcc test.c -o test 实际上,上面

linux下编译C++程序无法链接Mysql的问题

1.添加mysql的头文件 MYSQLINC = /usr/local/mysql/include 或 MYSQLINC = /usr/local/mysql 2.添加mysql的依赖库 #find / -name "libmysqlclient*" // 查找mysql lib的目录 MYSQLLIB = -L /usr/lib64/mysql -lmysqlclient -lz -lm 3.g++编译时添加 INC 与 MYSQLLIB 的支持 4.如果做了上述步骤仍然提示如下错误

解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”

centos64位编译32位代码,出现/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录,需要安装32位的glibc库文件. 安装32位glibc库文件命令: sudo yum install glibc-devel.i686(安装C库文件) sudo dnf install glibc-devel.i686(fedora命令) 安装32位glibc++库文件命令 sudo  yum install libstdc++-dev

Linux下执行Java程序

在linux下编译java程序,执行javac编译生成class文件时,在centos7终端输入如,javac hello.java    会提示未找到指令,但用java -verison测试环境变量是没问题的 百度了好久,说的很复杂,重新再linux配置环境变量,输入 vi /etc/profile进入,添加以下代码: export JAVA_HOME=/usr/local/jdk1.8.0_144 export PATH=$JAVA_HOME/bin:$PATH export CLASSPA

Linux下C/C++程序调试基础(GCC,G++,GDB,CGDB,DDD)

在写程序的时候,经常会遇到一些问题,比如某些变量计算结果不是我们预期的那样,这时我们需要对程序进行调试.本文主要介绍调试C/C++在Linux操作系统下主要的调试工具. 在Linux下写程序,C/C++主要的编译器有GCC/G++,ICC等,像我等穷码农,最喜欢GCC了,很大原因是他免费!所以,我们以GCC/G++为例介绍主要的调试工具. 分以下几个内容介绍: 1.调试之前的工作 2.选择调试工具 3.调试步骤 点我,请帮我投一票! 调试之前的工作 编译器在编译阶段需要产生可供调试的代码,才能被

linux下编译qt5.6.0静态库——configure配置

 随笔 - 116  文章 - 4  评论 - 7 linux下编译qt5.6.0静态库--configure配置 linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberry选项: Android 选项: 生成makefile 遇到链接检查失败的情况 生成makefile后进行编译 编译时的错误 多重定义'QT_MODBUS()'和'QT_MODBU

Linux下编译安装qemu和libvirt

目录 [hide] 1 安装qemu 1.1 qemu介绍 1.2 下载源文件 1.3 编译安装 2 安装libvirt 2.1 libvirt介绍 2.2 下载libvirt 2.3 编译安装 3 参考资料 KVM虚拟机(英语:Kernel-based Virtual Machine),是一种用于Linux内核中的虚拟化基础设施.KVM目前支援Intel VT及AMD-V的原生虚拟技术.KVM在2007年2月被导入Linux 2.6.20核心中.它也被引入FreeBSD.在Mac OS X中,

[转载]linux下编译php中configure参数具体含义

编译N次了   原来这么回事 原文地址:linux下编译php中configure参数具体含义作者:捷心特 php编译参数的含义 ./configure –prefix=/usr/local/php                      php 安装目录 –with-apxs2=/usr/local/apache/bin/apxs –with-config-file-path=/usr/local/php/etc      指定php.ini位置 –with-mysql=/usr/local