首页 > 解决方案 > 链接到 OCCI 库会生成有关 std::string 的警告

问题描述

我创建了一个使用std::string. 然后我将它链接到oraocci12.lib(用于发布)和oraocci12d.lib(用于调试)。并且只是在将静态库链接到 OCCI 库时,该项目会生成许多关于std::string. 警告都是关于已经定义的符号,例如:

警告 LNK4006:“公共:void __cdecl std::basic_string,class std::allocator >::_Copy(unsigned __int64,unsigned __int64)”(?_Copy@?$basic_string@DU?$char_traits@D@std@@V? $allocator@D@2@@std@@QEAAX_K0@Z) 已经在 oraocci12.lib(oraocci12.dll) 中定义;第二个定义被忽略

警告 LNK4006: "public: char * __cdecl std::_Wrap_alloc >::allocate(unsigned __int64)" (?allocate@?$_Wrap_alloc@V?$allocator@D@std@@@std@@QEAAPEAD_K@Z) 已经定义在 oraocci12.lib(oraocci12.dll) 中;第二个定义被忽略

警告 LNK4006:“公共:类 std::basic_string,class std::allocator > & __cdecl std::basic_string,class std::allocator >::assign(class std::basic_string,class std::allocator > const &, unsigned __int64,unsigned __int64)" (?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAAEAV12@AEBV12@_K1@Z) 已经在 oraocci12 中定义.lib(oraocci12.dll); 第二个定义被忽略

警告 LNK4006: "public: class std::basic_string,class std::allocator > & __cdecl std::basic_string,class std::allocator >::assign(char const *,unsigned __int64)" (?assign@?$basic_string @DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAAEAV12@PEBD_K@Z) 已经在 oraocci12.lib(oraocci12.dll) 中定义;第二个定义被忽略

警告 LNK4006: "public: class std::basic_string,class std::allocator > & __cdecl std::basic_string,class std::allocator >::erase(unsigned __int64,unsigned __int64)" (?erase@?$basic_string@ DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAAEAV12@_K0@Z) 已经在 oraocci12.lib(oraocci12.dll) 中定义;第二个定义被忽略

警告 LNK4006: "`string'" (??_C@_0BA@JFNIOLAK@string?5too?5long?$AA@) 已经在 oraocci12.lib(oraocci12.dll) 中定义;第二个定义被忽略

警告 LNK4006: "`string'" (??_C@_0BI@CFPLBAOH@invalid?5string?5position?$AA@) 已经在 oraocci12.lib(oraocci12.dll) 中定义;第二个定义被忽略

我试过改变:

还尝试链接到不同的 oracle 库:

我也尝试了上述的许多组合,但问题仍然存在。

IMP:如果项目类型是sll. 如果更改为dll,则警告消失。

环境细节:

  • Visual Studio 专业版 2017 (15.6.7)
  • 项目类型是静态库(sll,x64)
  • 视窗 10
  • Oracle Instantclient-sdk-windows.x64-12.2.0.1.0

谢谢大家!

标签: occi

解决方案


推荐阅读