0

介绍

几天来,我一直在尝试成功构建和运行 MySQL 连接器/C++ 8.0.27 的测试,但我觉得我正在失去理智,因为我所做的一切似乎都不起作用。我已经阅读了每一步的文档,但我仍然遇到了同样的问题。

问题

我正在运行这个测试代码,完全没有修改。我只打算将 JDBC 接口与连接器一起使用。这些是我在编译后收到的错误:

1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) void __cdecl check(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (__imp_?check@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) void __cdecl check(class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > const &)" (__imp_?check@@YAXAEBV?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@2@@std@@@Z)
1>main.obj : error LNK2001: unresolved external symbol __imp__get_driver_instance_by_name

无论我使用预构建的 8.0.27 连接器/C++ 库,还是我自己从 8.0.27 Windows 源代码构建的库,我都会收到此错误。

这是我当前的 cmake 配置命令(“<path>”只是完整路径的其余部分):

cmake .. -DBUILD_STATIC=ON -DWITH_JDBC=ON -DCMAKE_INSTALL_PREFIX="<path>/install/mysql_connector" -DWITH_SSL="<path>/install/OpenSSL" -DWITH_BOOST="<path>/boost_1_75_0" -DWITH_MYSQL="<path>/install/MySQL"

我的理解是链接器错误意味着链接器无法在mysqlcppconn-static.lib中找到对象,尽管“dllimport”似乎暗示该程序正在寻找动态库,即使我只链接到mysqlcppconn-static.lib 而不是mysqlcppconn .lib


系统信息

  • 操作系统: Windows 10 专业版、21H1
  • IDE: Microsoft Visual Studio Community 2019 预览版,版本 16.11.1 预览版 1.0
  • 平台工具集: Visual Studio 2019 (v142)
  • Windows SDK 版本: 10.0
4

1 回答 1

0

叹。嗯,我解决了。我想写下我的问题会导致答案,我是对的!当然,它简单得令人尴尬,我不知道我怎么没看到它。因此,为了潜在的未来 Google 员工,以下是答案:

我错过了MySQL 连接器文档中“注释”部分之前底部的一个非常简单的步骤

在 Connector/C++ 8.0.16 之前,对于使用旧 JDBC API 的应用程序,将 CPPCONN_PUBLIC_FUNC 宏定义为空字符串。为确保这一点,请将宏定义为 CPPCONN_PUBLIC_FUNC=,而不是 CPPCONN_PUBLIC_FUNC。

我添加了预处理器定义,现在一切正常。我一定已经把那页读了 15 遍,不知怎的,我的大脑完全跳过了那一步。

于 2021-11-22T00:05:21.357 回答