我已经创建了一个使用std::string
的静态库项目(sll)。然后,我将其链接到oraocci12.lib
(用于发布)和oraocci12d.lib
(用于调试)。而且,仅在将静态库链接到OCCI库后,该项目就会生成许多有关std::string
的警告。这些警告都是关于已定义符号的,例如:
警告LNK4006:“公共:void __cdecl std :: basic_string,类std :: allocator> :: _ Copy(未签名 __int64,unsigned __int64)“(?_Copy @?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ QEAAX_K0 @ Z) 已经在oraocci12.lib(oraocci12.dll)中定义;第二个定义 已忽略
警告LNK4006:“公共: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,类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 @@ QEAAAEAV12 @ AEBV12 @ _K1 @ Z) 已经在oraocci12.lib(oraocci12.dll)中定义;第二个定义 已忽略
警告LNK4006:“公共:类std :: basic_string,类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 @@ QEAAAEAV12 @ PEBD_K @ Z) 已经在oraocci12.lib(oraocci12.dll)中定义;第二个定义 已忽略
警告LNK4006:“公共:类std :: basic_string,类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 @@ QEAAAEAV12 @ _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 Professional 2017(15.6.7)
- 项目类型为静态库(sll,x64)
- Windows 10
- Oracle instantclient-sdk-windows.x64-12.2.0.1.0
谢谢!