社会 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项目,可以构建项目。
我正在使用这行代码构建一个带有 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项目,可以构建项目。