7

我想在 linux 中使用 C++ 连接到 mysql 数据库。在我的本地机器上,我正在运行 Ubuntu,并安装了 mysql 服务器和客户端软件包:

sudo apt-get install mysql-server mysql-client

我遇到了Mysql++,但是从他们的二进制包运行 ./configure 时遇到了一些问题。错误说:

检查 MySQL 库目录...配置:错误:在 '/usr/lib64 /usr/lib /usr/lib64/mysql /usr/lib/mysql /usr/local/lib64 /usr/local 中找不到 mysqlclient 库/lib /usr/local/lib/mysql /usr/local/mysql/lib /usr/local/mysql/lib/mysql /usr/mysql/lib/mysql /opt/mysql/lib /opt/mysql/lib/mysql /sw/lib /sw/lib/mysql'

我看到我可以在哪里使用这个命令来指定路径:

./configure --with-mysql-lib=/...

但我不知道该指向哪里。我使用 whereis mysql 但找不到任何包含 lib 子目录的 mysql 目录。mysqlclient 库将安装在哪里?


编辑:

定位后libmysqlclient我回来了

/usr/lib/i386-linux-gnu/libmysqlclient.so.18
/usr/lib/i386-linux-gnu/libmysqlclient.so.18.0.0
/usr/lib/i386-linux-gnu/libmysqlclient_r.so.18
/usr/lib/i386-linux-gnu/libmysqlclient_r.so.18.0.0
/usr/share/doc/libmysqlclient18
/usr/share/doc/libmysqlclient18/changelog.Debian.gz
/usr/share/doc/libmysqlclient18/copyright
/var/cache/apt/archives/libmysqlclient18_5.5.22-0ubuntu1_i386.deb
/var/lib/dpkg/info/libmysqlclient18:i386.list
/var/lib/dpkg/info/libmysqlclient18:i386.md5sums
/var/lib/dpkg /info/libmysqlclient18:i386.postinst
/var/lib/dpkg/info/libmysqlclient18:i386.postrm
/var/lib/dpkg/info/libmysqlclient18:i386.shlibs

所以,我试过./configure --with-mysql-lib=/usr/lib/i386-linux-gnu 了,它似乎没有任何抱怨就完成了。

虽然这解决了 ./configure 完成的问题,但我还有更多的麻烦。当我运行时make一切都很好,直到这一点:

在来自 ./lib/sql_buffer.h:31:0 的文件中,来自 ./lib/sql_buffer.cpp:26: ./lib/refcounted.h:258:2: error: 'size_t' does not name a type 。 /lib/refcounted.h:在构造函数“mysqlpp::RefCountedPointer::RefCountedPointer()”中:./lib/refcounted.h:89:2: 错误:类“mysqlpp::RefCountedPointer”没有任何名为“refs_”的字段' ./lib/refcounted.h: 在构造函数 'mysqlpp::RefCountedPointer::RefCountedPointer(T*)': ./lib/refcounted.h:100:2: 错误:类 'mysqlpp::RefCountedPointer' 没有任何名为“refs_”的字段./lib/refcounted.h:104:4:错误:“refs_”未在此范围内声明。/lib/refcounted.h:104:16:错误:“size_t”之前的预期类型说明符./lib/refcounted.h:104:16: 错误:预期';' 在'size_t' ./lib/refcounted.h 之前:在构造函数'mysqlpp::RefCountedPointer::

我对 C++ 不是很熟悉,所以我不确定这个错误的确切含义。任何关于如何从这一点获得 Mysql++ 设置的帮助或指导将不胜感激。虽然,我承认我也开始寻找可以使用的替代库。

4

2 回答 2

9

之所以会出现此问题,是因为size_t在配置(make)文件中调用 stddef 命名空间之前,它依赖于它的包含。

我遇到了同样的问题(使用亚马逊 EC2 ubuntu 12.04 云服务器)并通过编辑有问题的文件(sql_buffer.cpp在我的情况下位于 /home/ubuntu/mysql++-3.1.0/lib)并包括 stddef(同时向上移动字符串命名空间):

#include <stddef.h>
#include <string.h>
#include "sql_buffer.h"

这个更正回答了你的问题。但是,您可能会遇到其他问题,就像我一样。所以我解释了我是如何解决一些后续问题的,你可能有也可能没有。

你可能不得不使用

sudo chown username sql_buffer.cpp

能够编辑文件,具体取决于您的安装方式(例如,我是用户 ubuntu)。

然后我遇到了另一个问题:

./ssx/genv2.cpp: In function âbool generate_ssqls2(const char*, const ParseV2*)â:
./ssx/genv2.cpp:70:28: error: âstrcmpâ was not declared in this scope

所以我编辑了有问题的文件(genv2.cpp)并包含了字符串命名空间

#include <string.h>

然后我遇到了另一个问题:

./libmysqlpp_ssqls2parse.a(ssqls2parse_parsev2.o): In function `Type':
/home/ubuntu/mysql++-3.1.0/./ssx/parsev2.cpp:256: undefined reference to `mysqlpp::internal::str_to_lwr

我本可以编辑Makefile.in但选择简单地在命令行中运行:

sudo  g++ -o test_ssqls2 test_ssqls2_ssqls2.o -lmysqlpp_ssqls2parse   -L. -lmysqlclient   -L/usr/lib/x86_64-linux-gnu  -lmysqlpp

然后我继续这个make过程。

这对我有用:安装并运行 mysql++。

于 2012-10-11T14:42:19.150 回答
1

您需要安装头文件(开发)文件,我假设其中之一:

apt-cache search mysql
...
libmysqlclient-dev - MySQL database development files
libmysqlclient16 - MySQL database client library
libmysql++-dev - MySQL C++ library bindings (development)
libmysqlcppconn-dev - MySQL Connector for C++ (development files)
...

--with-mysql-lib应该不是必需的,因为这些文件将安装在默认位置。

于 2012-06-01T11:42:30.967 回答