【问题标题】:MySQL C++ ConnectorMySQL C++ 连接器
【发布时间】:2015-02-03 07:47:46
【问题描述】:


我正在使用 MySQL/C++ 连接器。
我在这个question中尝试了'd3l'提供的解决方案
然后我得到了这个错误:

tester.cpp:在函数“int main()”中: tester.cpp:12:20:警告:变量‘con’设置但未使用 [-Wunused-but-set-variable] sql::连接 *con; ^ /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::affected_rows(st_mysql*)”中: (.text+0x164): 未定义对 `mysql_affected_rows' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::autocommit(st_mysql*, char)'中: (.text+0x18d): 未定义的对 `mysql_autocommit' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::close(st_mysql*)”中: (.text+0x1ac): 未定义的对 `mysql_close' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::commit(st_mysql*)”中: (.text+0x1ca): 未定义的对 `mysql_commit' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::data_seek(st_mysql_res*, unsigned long long)'中: (.text+0x1f3): 未定义的对 `mysql_data_seek' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::debug(char const*)'中: (.text+0x212): 未定义的对 `mysql_debug' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::mysql_errno(st_mysql*)'中: (.text+0x230): 未定义的对 `mysql_errno' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::error(st_mysql*)'中: (.text+0x24e): 未定义的对 `mysql_error' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::fetch_field(st_mysql_res*)'中: (.text+0x26c): 未定义的对 `mysql_fetch_field' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::fetch_field_direct(st_mysql_res*, unsigned int)'中: (.text+0x292): 未定义的对 `mysql_fetch_field_direct' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::fetch_lengths(st_mysql_res*)'中: (.text+0x2b0): 对 `mysql_fetch_lengths' 的未定义引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::fetch_row(st_mysql_res*)'中: (.text+0x2ce): 未定义的对 `mysql_fetch_row' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::field_count(st_mysql*)”中: (.text+0x2ec): 未定义的对 `mysql_field_count' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::free_result(st_mysql_res*)'中: (.text+0x30a): 未定义的对 `mysql_free_result' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::get_client_version()”中: (.text+0x31d): 未定义对 `mysql_get_client_version' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::get_server_info(st_mysql*)”中: (.text+0x33c): 未定义的对 `mysql_get_server_info' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::get_server_version(st_mysql*)'中: (.text+0x35a): 未定义对 `mysql_get_server_version' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::info(st_mysql*)'中: (.text+0x378): 未定义的对 `mysql_info' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::init(st_mysql*)'中: (.text+0x396): 未定义的对 `mysql_init' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::library_init(int, char**, char**)'中: (.text+0x3c4): 未定义的对 `mysql_server_init' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::library_end()”中: (.text+0x3d7): 未定义的对 `mysql_server_end' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::more_results(st_mysql*)'中: (.text+0x3f6): 未定义的对 `mysql_more_results' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::next_result(st_mysql*)”中: (.text+0x414): 未定义的对 `mysql_next_result' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::num_fields(st_mysql_res*)'中: (.text+0x432): 未定义的对 `mysql_num_fields' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::num_rows(st_mysql_res*)'中: (.text+0x450): 未定义的对 `mysql_num_rows' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::options(st_mysql*, mysql_option, void const*)'中: (.text+0x47e): 未定义的对 `mysql_options' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::query(st_mysql*, char const*)'中: (.text+0x4a7): 未定义的对 `mysql_query' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::ping(st_mysql*)'中: (.text+0x4c6): 未定义的对 `mysql_ping' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o): 在函数 `sql::mysql::NativeAPI::LibmysqlStaticProxy::real_connect(st_mysql*, char const*, char const*, char const*, char const *, unsigned int, char const*, unsigned long)': (.text+0x519): 未定义的对 `mysql_real_connect' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::real_escape_string(st_mysql*, char*, char const*, unsigned long)'中: (.text+0x550): 未定义的对 `mysql_real_escape_string' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o): 在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::real_query(st_mysql*, char const*, unsigned long)'中: (.text+0x581): 未定义的对 `mysql_real_query' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::rollback(st_mysql*)”中: (.text+0x5a0): 未定义的对 `mysql_rollback' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::sqlstate(st_mysql*)”中: (.text+0x5be): 未定义的对 `mysql_sqlstate' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o): 在函数 `sql::mysql::NativeAPI::LibmysqlStaticProxy::ssl_set(st_mysql*, char const*, char const*, char const*, char const *, 字符常量*)': (.text+0x603): 未定义的对 `mysql_ssl_set' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::store_result(st_mysql*)”中: (.text+0x622): 未定义的对 `mysql_store_result' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::use_result(st_mysql*)”中: (.text+0x640): 未定义的对 `mysql_use_result' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::warning_count(st_mysql*)”中: (.text+0x65e): 未定义的对 `mysql_warning_count' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_affected_rows(st_mysql_stmt*)'中: (.text+0x67c): 未定义的对 `mysql_stmt_affected_rows' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_attr_set(st_mysql_stmt*, enum_stmt_attr_type, void const*)'中: (.text+0x6aa): 未定义的对 `mysql_stmt_attr_set' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_bind_param(st_mysql_stmt*, st_mysql_bind*)'中: (.text+0x6d3): 未定义的对 `mysql_stmt_bind_param' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_bind_result(st_mysql_stmt*, st_mysql_bind*)'中: (.text+0x6fd): 未定义的对 `mysql_stmt_bind_result' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_close(st_mysql_stmt*)”中: (.text+0x71c): 未定义的对 `mysql_stmt_close' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_data_seek(st_mysql_stmt*, unsigned long long)'中: (.text+0x745): 未定义的对 `mysql_stmt_data_seek' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_errno(st_mysql_stmt*)'中: (.text+0x764): 未定义的对 `mysql_stmt_errno' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_error(st_mysql_stmt*)”中: (.text+0x782): 未定义的对 `mysql_stmt_error' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_execute(st_mysql_stmt*)”中: (.text+0x7a0): 未定义的对 `mysql_stmt_execute' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数“sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_fetch(st_mysql_stmt*)”中: (.text+0x7be): 未定义的对 `mysql_stmt_fetch' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_field_count(st_mysql_stmt*)'中: (.text+0x7dc): 未定义的对 `mysql_stmt_field_count' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_init(st_mysql*)'中: (.text+0x7fa): 未定义的对 `mysql_stmt_init' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_num_rows(st_mysql_stmt*)'中: (.text+0x818): 未定义的对 `mysql_stmt_num_rows' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_param_count(st_mysql_stmt*)'中: (.text+0x836): 未定义的对 `mysql_stmt_param_count' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_prepare(st_mysql_stmt*, char const*, unsigned long)'中: (.text+0x867): 未定义的对 `mysql_stmt_prepare' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_result_metadata(st_mysql_stmt*)'中: (.text+0x886): 未定义的对 `mysql_stmt_result_metadata' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o): 在函数 `sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_send_long_data(st_mysql_stmt*, unsigned int, char const*, unsigned long)'中: (.text+0x8ba): 未定义的对 `mysql_stmt_send_long_data' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_sqlstate(st_mysql_stmt*)'中: (.text+0x8d8): 未定义的对 `mysql_stmt_sqlstate' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::stmt_store_result(st_mysql_stmt*)'中: (.text+0x8f6): 未定义对 `mysql_stmt_store_result' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::thread_end()'中: (.text+0x909): 未定义的对 `mysql_thread_end' 的引用 /usr/lib/libmysqlcppconn.a(mysql_client_api.cpp.o):在函数`sql::mysql::NativeAPI::LibmysqlStaticProxy::thread_init()'中: (.text+0x91d): 未定义的对 `mysql_thread_init' 的引用 collect2:错误:ld 返回 1 个退出状态

我正在运行 Ubuntu 14。
请帮忙。

编辑:
正如“mukunda”所说:
"通常connector/c++已经静态链接到libmysql,这是构建源码时的默认设置"

所以我编译它:

sudo g++ -Wall -I/usr/include/cppconn -o testapp tester.cpp

然后错误减少到只有:

tester.cpp:在函数“int main()”中: tester.cpp:12:20:警告:变量‘con’设置但未使用 [-Wunused-but-set-variable] sql::连接 *con; ^ /tmp/ccSdYfYy.o:在函数“main”中: tester.cpp:(.text+0xa): undefined reference to `get_driver_instance' collect2:错误:ld 返回 1 个退出状态

再次编辑:
这是构建此代码的必要步骤:

#include <stdlib.h>
#include <iostream>
#include <mysql_connection.h>
#include <driver.h>
#include <exception.h>
#include <resultset.h>
#include <statement.h>

using namespace sql;
int main(void){
  sql::Driver *driver;
  sql::Connection *con;

  driver = get_driver_instance();
  con = driver->connect("tcp://127.0.0.1:3306","root","YOURPASSWORD");

  return 0;
}
1.安装mysqlcppconn:sudo apt-get install libmysqlcppconn-dev 2.安装mysqlclient:sudo apt-get install libmysqlclient-dev libmysqlclient18 3. 在终端中编译: sudo g++ -Wall -I/usr/include/cppconn -o testapp tester.cpp -L/usr/lib -lmysqlcppconn -lmysqlclient

感谢 Mike 和 Biffen。

【问题讨论】:

  • 看起来你没有链接到一些 MySQL 库。什么是链接器命令?
  • 我在终端编译代码使用:sudo g++ -Wall -I/usr/include/cppconn -o testapp tester.cpp -L/usr/lib -lmysqlcppconn
  • 是否应该链接其他一些 MySQL 库(除了mysqlcppconn)?
  • 我不这么认为。如果您看到我在问题中链接的问题,那么似乎每个人都对解决方案做得很好。
  • 通常connector/c++已经静态链接到libmysql,这是构建源码时的默认设置

标签: c++ mysql


【解决方案1】:

libmysqlcppconn 只是 libmysqlclient 的 C++ 包装器。您需要将它们链接起来才能使其工作(以及任何其他依赖项)。

【讨论】:

  • 我想我已经链接了它,我编译它使用:sudo g++ -Wall -I/usr/include/cppconn -o testapp tester.cpp -L/usr/lib -lmysqlcppconn跨度>
  • @rizkynggakool 你会说该命令的哪一部分链接libmysqlclient
  • 哦,我的错,我没有链接libmysqlclient,但我无法获取libmysqlclient,我尝试sudo apt-get install libmysqlclient 但找不到包
  • sudo apt-get install libmysqlclient-dev libmysqlclient18.您还需要 mysql-common 但它可能会自动安装它。如果没有,请使用 Synaptic 包管理器浏览存储库。
  • @Mike 我已经安装了 libmysqlclient-dev 然后使用重新编译它: sudo g++ -Wall -I/usr/include/cppconn -o testapp tester.cpp -lmysqlclient 但结果仍然像我在问题中所做的编辑
猜你喜欢
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 2023-03-12
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多