使用 MySQL Connector C++ 链接 mysqlcppconn-static 时出现问题
Problem when linking mysqlcppconn-static using MySQL Connector C++
我写的是我在 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++ mysql connection bad_alloc using c++ connector
但这对 linux 没有帮助,特别是我试图遵循提示:
I had the same error on linux.
The error was : I was using g++-4.8 to build the project
The issue lies on the version of the build tools (gcc,msvs,clang) used to build the project
by trying to update g++, but I have tha latest version.
Probably is more difficult to make this library work than writing the code I need for my application, I hope someone can suggest me what to try next.
谢谢
看来我用简单的方式解决了。我在这里写下我尝试过的以及我遇到的错误。
我再次阅读了开发人员指南,似乎使用提供的二进制文件可能会出现问题,因为库和项目使用了不同的编译器。然后我尝试编译源代码以确保用于库和我的项目的编译器是相同的。我遵循了这个指南: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
现在,所有尝试过的方法与最终解决方案相比似乎都是愚蠢的。我希望这可以为其他人节省时间。
谢谢
我写的是我在 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++ mysql connection bad_alloc using c++ connector 但这对 linux 没有帮助,特别是我试图遵循提示:
I had the same error on linux. The error was : I was using g++-4.8 to build the project The issue lies on the version of the build tools (gcc,msvs,clang) used to build the project by trying to update g++, but I have tha latest version. Probably is more difficult to make this library work than writing the code I need for my application, I hope someone can suggest me what to try next.
谢谢
看来我用简单的方式解决了。我在这里写下我尝试过的以及我遇到的错误。 我再次阅读了开发人员指南,似乎使用提供的二进制文件可能会出现问题,因为库和项目使用了不同的编译器。然后我尝试编译源代码以确保用于库和我的项目的编译器是相同的。我遵循了这个指南: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
现在,所有尝试过的方法与最终解决方案相比似乎都是愚蠢的。我希望这可以为其他人节省时间。 谢谢