首页 > 解决方案 > 使用 MySQL 连接器 C++ 链接 mysqlcppconn-static 时出现问题

问题描述

我正在写关于我在设置 MySQL 连接器 C++ 期间遇到的一个问题。我正在使用 Linux (Ubuntu 18.04) 的连接器的二进制分发版,所以我将库目录放在我的项目之外(这是参考指南中给出的示例之一 ( https://dev.mysql.com/doc /connector-cpp/1.1/en/connector-cpp-installation-binary.html)。

在我的项目(Clion)中,我有这个 cmake 文件:

cmake_minimum_required(VERSION 3.14)
project(MySQLConnectorTest)

set(CMAKE_CXX_STANDARD 14)

link_directories(../mysql-connector-c++/lib64)
link_directories(/opt/lampp/lib)
add_executable(MySQLConnectorTest main.cpp)
include_directories(../mysql-connector-c++/include/jdbc)
target_link_libraries(MySQLConnectorTest mysqlclient.a)
target_link_libraries(MySQLConnectorTest mysqlcppconn-static.a)

我拥有的 mySQL 安装是 XAMPP 提供的。所以找到的目录mysqlclient.a/opt/lampp/lib

问题是在链接时mysqlcppconn-static.a,在编译期间我得到一长串错误,如下所示:

/home/riccardo/MySQLConnectorTest/../mysql-connector-c++/lib64/libmysqlcppconn-static.a(libmysqlclient_client.cc.o): 
nella funzione "ssl_verify_server_cert(Vio*, char const*, char const**) [clone .isra.7]":
./obj/libmysql/../../mysql-8.0.16/sql-common/client.cc:3283: riferimento non definito a "SSL_get_peer_certificate"
./obj/libmysql/../../mysql-8.0.16/sql-common/client.cc:3288: riferimento non definito a "SSL_get_verify_result"
./obj/libmysql/../../mysql-8.0.16/sql-common/client.cc:3359: riferimento non definito a "X509_free"
./obj/libmysql/../../mysql-8.0.16/sql-common/client.cc:3302: riferimento non definito a "X509_check_host"
./obj/libmysql/../../mysql-8.0.16/sql-common/client.cc:3304: riferimento non definito a "X509_check_ip_asc"

有人可以解释一下这是什么意思吗?有人可以建议我如何解决吗?

提前致谢。

[编辑]:按照此处提供的建议,现在编译正常。我觉得还是有一个问题,示例程序在调用connect方法的时候抛出了异常:

/* Create a connection */
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
/* Connect to the MySQL test database */
con->setSchema("test");

我发现了有关此问题的其他帖子,例如使用 c++ 连接器的 c++ mysql 连接 bad_alloc 但这在 linux 中没有帮助,特别是我尝试遵循提示:

我在linux上遇到了同样的错误。错误是:我使用 g++-4.8 构建项目问题在于通过尝试更新 g++ 来构建项目的构建工具(gcc、msvs、clang)的版本,但我有最新版本。使这个库工作可能比编写我的应用程序所需的代码更困难,我希望有人能建议我接下来要尝试什么。

谢谢

标签: c++cmakemysql-connector

解决方案


似乎我以一种简单的方式解决了。我在这里写下我尝试过的内容以及遇到的错误。我再次阅读了开发人员指南,似乎使用提供的二进制文件可能会出现问题,因为库和项目使用了不同的编译器。然后我尝试编译源代码以确保用于库和我的项目的编译器是相同的。我遵循了本指南:https ://aaronxu17.github.io/blog/install-mysql-connector/

这不起作用,编译的库被命名为 mysqlcppconn8-static.a 而不是 mysqlcppconn-static.a,但是将名称引用更改为那个我遇到了如下编译错误:

reference not defined to get_driver_instance

最后我找到了这个https://stackoverrun.com/it/q/4344116,并简单地解决了

sudo apt-get install libmysqlcppconn-dev

现在,所有尝试过的方法对于最终解决方案似乎都是愚蠢的。我希望这可以节省其他人的时间。谢谢


推荐阅读