occi - 链接到 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) 中定义;第二个定义被忽略
我试过改变:
项目属性中的平台工具集=> 常规。
项目属性中的字符集=> 常规。
项目属性中的运行时库=> C/C++ => 代码生成。
项目属性中的详细信息=> 图书馆员 => 常规。
忽略Project Properties => Librarian => General中的所有默认库。
还尝试链接到不同的 oracle 库:
- msvc\vc14\oraocci12.lib(发布)
- msvc\vc14\oraocci12d.lib(调试)
- msvc\oraocci12.lib(发布)
- msvc\oraocci12d.lib(调试)
我也尝试了上述的许多组合,但问题仍然存在。
IMP:如果项目类型是sll
. 如果更改为dll
,则警告消失。
环境细节:
- Visual Studio 专业版 2017 (15.6.7)
- 项目类型是静态库(sll,x64)
- 视窗 10
- Oracle Instantclient-sdk-windows.x64-12.2.0.1.0
谢谢大家!
解决方案
推荐阅读
- sql - 如何以这种方式设置表 A,使表 B 中具有特定值的只有一行可以与表 A 中的行具有外键关系?
- amazon-web-services - 如何使 AWS Lambda 函数打开 URL 地址(在某些浏览器中)并保持 1 分钟?
- javascript - React 异步状态管理
- python - 如何使 wait_for() 函数在 cogs discord.py 中工作?
- python - 如何从整数列表中删除字符串?
- c# - 如何使用断点调试具有多个 dll 的 exe
- amazon-web-services - 如何在 AWS Cognito 中添加裸自定义范围?
- excel - 在另一行被隐藏后,基于单元格值的隐藏行变为未隐藏
- svg - 使用 Scrapy 保存 (.svg) 图像
- c# - VS 扩展 VSIX 有没有办法在 VSIX 命令中获取多个光标的位置?