【发布时间】:2019-06-11 18:38:58
【问题描述】:
我写的是我在设置 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 中没有帮助,特别是我试图按照提示进行操作:
我在 linux 上遇到了同样的错误。 错误是:我使用 g++-4.8 构建项目 问题在于用于构建项目的构建工具(gcc、msvs、clang)的版本 通过尝试更新 g++,但我有最新版本。 让这个库工作可能比编写我的应用程序所需的代码更难,我希望有人能建议我下一步该尝试什么。
谢谢
【问题讨论】:
-
感谢您的评论,尝试添加以下行: target_link_libraries(MySQLConnectorTest ssl.so) target_link_libraries(MySQLConnectorTest crypto.so) 但输出没有任何变化
-
mysqlcppconn-static.a库需要丢失的符号,ssl和crypto库应该在 之后添加:target_link_libraries(MySQLConnectorTest mysqlcppconn-static.a ssl crypto) -
哦好吧,这似乎开始工作,但现在我有这个错误:/usr/bin/ld: /home/riccardo/MySQLConnectorTest/../mysql-connector-c++/lib64/libmysqlcppconn- static.a(libmysqlclient_client_plugin.cc.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5' //lib/x86_64-linux-gnu/libdl.so.2: error added symbols: DSO missing from command line Trying to在末尾添加“dl”,但这会给 pthread 带来很多错误。
-
所以你也需要链接
dl库。只需 google 查找丢失的符号,您就会找到需要链接的库。
标签: c++ cmake mysql-connector