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

Posted

技术标签:

【中文标题】soci ODBC 的 C++ 链接器错误 LNK2019【英文标题】:C++ linker error LNK2019 for soci ODBC 【发布时间】:2015-02-27 12:30:18 【问题描述】:

我正在使用这行代码用 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

我使用以下方法构建了社会:

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 后端库。我在哪里可以找到它?

【问题讨论】:

【参考方案1】:

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

希望这会有所帮助!

【讨论】:

【参考方案2】:

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

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

"Visual Studio 12 Win64"

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

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

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

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

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

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

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

【讨论】:

以上是关于soci ODBC 的 C++ 链接器错误 LNK2019的主要内容,如果未能解决你的问题,请参考以下文章

c++链接器错误LNK2005已经在SDL中定义

将 DCMTK 与 Visual Studio 一起使用时出现链接器错误 LNK2019

Qt Creator 链接器错误:LNK1104:无法打开文件“opencv_core249d.lib”

visual C++ 6.0 问题:链接:致命错误LNK1104:无法打开文件“调试/ d.exe“ 执行link.exe时出错。

MongoDB 和 Visual C++ 2008 链接器错误

错误:链接:致命错误 LNK1561:入口点必须定义 C++