转贴_vc++ 编译 occi 接口的 环境设置
VC编译OCCI的解决方案
解决过程中,发现少有的解决方案也是零星和不详细的。
我把总结的成果共享一下吧,希望能对后来者有所帮助。
Windows下编译yield的步骤:
一、
1、
2、
二、
1、增加接口。在OcciDml.hpp中增加extern "C" int __declspec(dllexport)funA(char* a);
2、修改头文件。在需要引入的所有类中,替换为
#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->Libraryfiles中加入%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中选择”Ignoreall defaultlibraries”,然后修改为/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
六、部署