首页 > 解决方案 > 如何在 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++ 的?因为,我很难找到最近的好文章或博客。

标签: c++databasesoci

解决方案


显然,这个问题不仅仅存在于 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

这消除了我所有的错误,并且解决方案成功构建,没有任何错误。我不知道为什么维护人员没有对库本身进行更改以避免这种情况。我希望与他们取得联系,并要求他们也这样做。

希望这可以帮助在任何图书馆遇到类似问题的每个人。


推荐阅读