VC编译OCCI的解决方案

来源:互联网 发布:曼哈顿模考软件 编辑:程序博客网 时间:2024/05/16 06:47

 

解决过程中,发现少有的解决方案也是零星和不详细的。我把总结的成果共享一下吧,希望能对后来者有所帮助。

Windows下编译的步骤

 

2005-7-28

 

一、        安装必备软件

 

1、        安装Oracle客户端,其中会含有oci的库文件。

 

2、        安装MS Visual C++

 

 

二、        修改源文件

 

1、增加接口。在OcciDml.hpp中增加extern "C" int __declspec(dllexport) funA(char* a);   在

 

OcciDml.cpp中将函数声明修改为extern "C" int __declspec(dllexport) funA(char* a)

 

2、修改头文件。在需要引入的所有类中,替换为

 

  #ifndef OCCI_ORACLE

 

#define WIN32COMMON

 

#include "occi.h"

 

using namespace oracle::cci;

 

using namespace std;

 

#endif

 

否则会出现错误如下:

 

d:\oracle\ora92\oci\include\occicontrol.h(1132) : error C2995: 'getVector' : template

 

function has already been defined

 

d:\oracle\ora92\oci\include\occicommon.h(425) : see declaration of 'getVector'

 

 

 

三、        设置环境变量

 

1、        设置INCLUDE,这可以使cl.exe在命令行时执行成功

 

2、        设置LIB,这可以使cl.exe在link时找到库

 

 

四、        VC设置环境

 

1、        在Tools->Options->Directories->INCLUDE中加入%ORACLE_HOME%/OCI/INCLUDE和%ORACLE_HOME%/PRECOMP/PUBLIC。

 

2、        在Tools->Options->Directories->Library files中加入%ORACLE_HOME%/OCI/lib/MSVC/VC6和%ORACLE_HOME%/OCI/lib/MSVC  和%ORACLE_HOME%/precomp/lib/MSVC

 

3、在Project->Setting->Link->Input中增加oci.lib,oraocci10d.lib,oraSQL10.lib,msvcrt.lib

 

4、在Project->Setting->Link->General中选择”Ignore all default libraries”,然后修改为

 

/NODEFAULTLIB:libcd

 

5、在Project->Setting->C/C++->Preprocessor中增加WIN32COMMON,_MT,_DLL

 

否则,会出现ResultSet的getString错误。

 

6、附编译后日志中的编译选项为/nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D

 

"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "YIELDDLL_EXPORTS" /D "WIN32COMMON" /D "_MT" /D "_DLL" /FR"Debug/" /Fp"Debug/yielddll.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD

 

/GZ /c

 

五、设置Oracle的lisener

 

  找到lisener.ora,修改为(ENVS="EXTPROC_DLLS=ANY")

 

六、部署

 

  拷贝到oracle的bin目录下,执行create library命令