soci ODBC的C++链接器错误LNK2019

C++ linker error LNK2019 for soci ODBC

本文关键字:错误 LNK2019 链接 C++ ODBC soci      更新时间:2023-10-16

我正在使用以下代码行使用soci构建一个c++项目:

session sql(odbc, "DRIVER={SQL Server};SERVER=server;DATABASE=database;UID=user;PWD=pass;");

我收到这个链接器错误消息:

Error   1   error LNK2019: unresolved external symbol
"public: __cdecl soci::session::session(class soci::backend_factory const
 &,class std::basic_string<char,struct std::char_traits<char>,class
 std::allocator<char> > const &)" (??
 0session@soci@@QEAA@AEBVbackend_factory@1@AEBV?$basic_string@DU
 $char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function main
 D:DevelopmentPrivateKkserverkservermain.obj  kserver

我已经建立了soci使用:

cmake -G "Visual Studio 12 Win64" -DWITH_BOOST=ON -DWITH_ODBC=ON -DCMAKE_BUILD_TYPE=Debug ..soci-mastersrc

我还将include文件夹添加到了项目中,这似乎很好。

我还添加了:

D:DevelopmentToolslibsocilibDebug

到链接器目录。

如果我只使用构建,它就会起作用

session sql()

我好像错过了ODBC后端库。我在哪里找到它?

我宁愿把它作为评论,但我没有足够的声誉。可能缺少soci后端.h。文件soci-odbc.h将有一行包含soci-backend.h只需检查此包含是否有效。如果它当时不工作,则无法从soci-odbc.h访问soci-backend.h,这就是问题的原因。如果我没记错的话,那么soci-backend.h可能就在soci-odbc.h的上面的目录中。对soci-odbc.h中的include进行更改,事情就可能开始工作了。

希望这能有所帮助!!

答案是这样的(没有头发了):

我使用cmake生成的解决方案如下:

"Visual Studio 12 Win64"

这意味着我正在制定Studio 122013解决方案。

我以前安装过Studio 112012,它安装了x64 Cross Tools Command Prompt

我正在测试构建的Studio 2013社区版似乎没有安装到Studio 2013环境的快捷方式。

在此之后,在构建SOCI时,ODBC的后端没有构建,因为它找不到include和library文件夹,而我在构建的输出中没有注意到这些文件夹。

为了解决这个问题,我需要启动命令行使用:

%comspec% /k ""C:Program Files (x86)Microsoft Visual Studio 12.0VCvcvarsall.bat"" x86_amd64

之后,ODBC项目也在解决方案中创建,并且可以构建该项目。