我想用c ++进行数据库编码。 What modern C++ libraries should be in my toolbox?表明SOCI是一个很好的跨平台,免费的库。但是SOCI的安装是一个大问题,因为我找不到很好的博客,教程或文章,也没有提供任何详细的摘要。我按照SOCI官方页面http://soci.sourceforge.net/doc/3.2/installation.html上的说明进行操作,但是成功之后(因为它无法检测到增强,所以我不得不运行它),在我在Visual Studio中构建.sln时,它运行了cmake。给我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 ++更喜欢C api? Cos,我很难在同一篇文章上找到近期的好文章或博客。
答案 0 :(得分:0)
您要构建什么版本的soci?我发现thread与您的错误:
构建失败,因为有两个包含的文件重新定义了'snprintf'符号。第一个定义在“ D:\ devsrc \ soci-3.2.3 \ core \ soci-platform.h”中,第二个定义(产生错误)在“ C:\ Program Files(x86)\ Windows Kits \ 10 \ include \ 10.0.10150.0 \ ucrt \ stdio.h”(标准库文件)。
要解决该错误,请注释“ D:\ devsrc \ soci-3.2.3 \ core \ soci-platform.h”的第27行:
// #define snprintf _snprintf
,因此SOCI会忽略其自身的定义,而使用标准库的定义。
但是图书馆的作者说:
记录下来,我刚刚设法用VS2015构建SOCI 3.2.3 (CL.EXE版本19.00.24215.1),而无需进行任何问题或修改。
git clone https://github.com/SOCI/soci.git git co release/3.2 mkdir _build cd _build cmake ..
然后使用VS2015加载SOCI.sln并进行构建。
您还可以尝试构建master分支(又称为 4.0.0 版本)。
答案 1 :(得分:0)
显然,此问题不仅与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(标准库)中。因此,它与使用它的所有库的宏都冲突。
解决该问题的唯一方法是如下手动更改宏的名称(如视频中所示)或编辑宏定义(我做了,更喜欢使用cos使其更清晰)。 :
#define snprintf _snprintf
至:
#if _MSC_VER < 1900
#define snprintf _snprintf
#endif
这消除了我的所有错误,并且解决方案构建成功,没有任何错误。
我不知道为什么维护人员没有对库本身进行更改以避免这种情况。我希望与他们保持联系,并要求他们也这样做。
希望这对任何在图书馆遇到类似问题的人有所帮助。