c++ - 如何在 Windows 10 上正确安装 SOCI c++ 库?
问题描述
我想用 C++ 做数据库编码。我的工具箱中应该有哪些现代 C++ 库?表明 SOCI 是一个很好的跨平台免费库。但是 SOCI 的安装是一个大问题,因为我找不到好的博客、教程或文章或任何提供详细说明的东西。我按照 SOCI 官方页面http://soci.sourceforge.net/doc/3.2/installation.html上的说明进行操作,但在成功之后(有点因为它没有检测到 boost。所以我不得不在没有 boost 的情况下运行它)运行 cmake ,当我在 Visual Studio 中构建 .sln 时,它给了我 4 个错误。我尝试了几天,但似乎没有任何效果。yt 上只有一个视频https://www.youtube.com/watch?v=gFGLKaDnwmI,但它显示了一种方法,即您必须操作 lib 文件中的 micros。我不想那样做。而且由于我认为这是一个著名且受欢迎的库,因此我不必这样做。无论如何,构建 o/p 太大,所以我发布了我得到的错误。第一个出现了 3 次。所以,这就是为什么我认为我在最终结果中获得了 4 失败。
5>C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt\stdio.h(1935): fatal error C1189: #error: Macro definition of snprintf conflicts with Standard Library function declaration
8>LINK : fatal error LNK1104: cannot open file '..\..\..\lib\Debug\libsoci_postgresql_3_2.lib'
========== Build: 8 succeeded, 4 failed, 0 up-to-date, 3 skipped ==========
我还有一个不重要的问题,但仅供参考(不要为此标记我。如果你愿意,我会删除它)。数据库编程不是经常用 C++ 完成吗?或者如果完成,c++ 编码人员是否更喜欢 C api 而不是 c++ 的?因为,我很难找到最近的好文章或博客。
解决方案
显然,这个问题不仅仅存在于 SOCI。在寻找解决方案时,我遇到了很多与 VS17 有相同问题的其他库。https://github.com/robotology/icub-firmware-shared/issues/25 https://forum.juce.com/t/solved-error-with-vs2015-regarding-snprintf/14831链接一些。似乎在某个版本之后将“snprintf”添加到 VS(标准库)中。所以它与所有使用它的库的宏冲突。
解决它的唯一方法是手动更改宏的名称(如视频中所示)或编辑宏定义(我这样做并且更喜欢因为它更干净),如下所示:
#define snprintf _snprintf
至:
#if _MSC_VER < 1900
#define snprintf _snprintf
#endif
这消除了我所有的错误,并且解决方案成功构建,没有任何错误。我不知道为什么维护人员没有对库本身进行更改以避免这种情况。我希望与他们取得联系,并要求他们也这样做。
希望这可以帮助在任何图书馆遇到类似问题的每个人。
推荐阅读
- r - abline() 函数不会在图中绘制线条
- r - 如果所有值都为 0,则用 R 填充缺失
- javascript - 如何在 RazorViewEngine 的文本框上添加 onmouseleave 属性
- mc - 如何在午夜指挥官的数字键盘上的键 5 上绑定 F3 行为?
- python - 安装 Jupyter 时出错:命令出错,退出状态为 1:python setup.py egg_info 检查日志以获取完整的命令输出
- flutter - 发生异常。FormatException (FormatException: 意外字符 (在字符 1) ^ )
- mysql - 插入记录并增加其他记录的值
- php - PHP - 如何获取没有值的 $_GET 参数
- html - 让 MatDatePicker 显示为格式 01/01/2010
- javascript - 如何禁用弹出窗口阻止程序?