社会 ODBC 的 C++ 链接器错误 LNK2019

C++ linker error LNK2019 for soci ODBC

我正在使用这行代码构建一个带有 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:\Development\Private\K\kserver\kserver\main.obj  kserver

我已经使用以下方法构建了 soci:

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

我还在项目中添加了包含文件夹,这似乎没问题。

我还添加了:

D:\Development\Tools\lib\soci\lib\Debug

链接器目录。

如果我只构建它就可以工作:

session sql()

我好像缺少 ODBC 后端库。我在哪里可以找到它?

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

希望这对您有所帮助!!

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

我正在使用 cmake 生成解决方案:

"Visual Studio 12 Win64"

这意味着我正在创建 Studio 12 2013 解决方案。

我之前安装了 Studio 11 2012,其中安装了 x64 Cross Tools Command Prompt.

我正在测试构建的 Studio 2013 Community Edition 似乎没有安装 Studio 2013 环境的快捷方式。

在构建 SOCI 时,没有构建 ODBC 后端,因为它找不到我在构建输出中没有注意到的包含和库文件夹。

要解决此问题,我需要使用以下命令启动命令行:

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

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