我有一个静态链接到oci.lib(12.1.0.1.0)的小型Windows x64控制台程序,到目前为止一直运行良好,直到我尝试使用API OCIObjectGetAttr / OCIObjectSetAttr . 现在我的程序给出了以下链接器错误:
-
错误19错误LNK2019:未解析的外部符号“int __cdecl OCIObjectSetAttr(struct OCIEnv *,struct OCIError *,void *,void *,struct OCIType *,unsigned char const * *,unsigned int const *,unsigned int,unsigned int const * ,unsigned int,short,void const *,void const *)“(?OCIObjectSetAttr @@ YAHPEAUOCIEnv @@ PEAUOCIError @@ PEAX2PEAUOCIType @@ PEAPEBEPEBII5IFPEBX6 @ Z)在函数”bool __cdecl dump_object中引用(struct OCIEnv *,struct OCIError *,struct OCISvcCtx *,void *,void *,void *)“(?dump_object @@ YA_NPEAUOCIEnv @@ PEAUOCIError @@ PEAUOCISvcCtx @@ PEAX33 @ Z)
-
错误20错误LNK2019:未解析的外部符号“int __cdecl OCIObjectGetAttr(struct OCIEnv *,struct OCIError *,void *,void *,struct OCIType *,unsigned char const * *,unsigned int const *,unsigned int,unsigned int const * ,unsigned int,short *,void * *,void * *,struct OCIType * )“(?OCIObjectGetAttr @@ YAHPEAUOCIEnv @@ PEAUOCIError @@ PEAX2PEAUOCIType @@ PEAPEBEPEBII5IPEAFPEAPEAX7PEAPEAU3 @@ Z)在函数”bool __cdecl dump_object(struct OCIEnv)中引用,struct OCIError *,struct OCISvcCtx *,void *,void *,void *)“(?dump_object @@ YA_NPEAUOCIEnv @@ PEAUOCIError @@ PEAUOCISvcCtx @@ PEAX33 @ Z)
仅评论这两个API可修复链接器错误 . 我确保除了添加两个OCIObjectGetAttr和OCIObjectSetAttr API调用之外,项目中的任何内容都没有改变 . 其他OCIObject * API正在链接 . dumpbin / exports oci.lib显示OCIObjectGetAttr和OCIObjectSetAttr是从oci.lib导出的 .
我错过了什么?
坚持了很长一段时间 . 谷歌/社区搜索也没有帮助 .
请帮忙 .
TIA
注意:Also posted in OTN(https://community.oracle.com/message/12457198#12457198)请在绝望中原谅重复发布
1 回答
似乎是orid.h中的一个错误,以下让我走了 . 我试图从C链接,因为orid.h缺少标准的extern“C”块,用于从其他oci头文件链接到C .
在以下内容中包含orid.h的内容让我成功编译 .
希望Oracle在下一个即时客户端版本中修复它:) .
感谢Ceann和ddevienne帮助我缩小范围 .