我想用Linux中的C ++连接到mysql数据库。在我的本地机器上,我正在运行Ubuntu,并安装了mysql服务器和客户端软件包:
sudo apt-get install mysql-server mysql-client
我遇到了Mysql++,但在从二进制包运行./configure时遇到了一些问题。错误说:
检查MySQL库目录... configure:错误:在'/ usr / lib64 / usr / lib / usr / lib64 / mysql / usr / lib / mysql / usr / local / lib64 /中找不到mysqlclient库usr / local / 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 /共享/ DOC / libmysqlclient18
/usr/share/doc/libmysqlclient18/changelog.Debian.gz
在/ usr /共享/ DOC / libmysqlclient18 /版权
/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:错误:'size_t'没有命名类型 ./lib/refcounted.h:在构造函数'mysqlpp :: RefCountedPointer :: RefCountedPointer()':./ lib / refcounted.h:89:2:错误: class'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 :: RefCountedPointer(常量 ThisType&)':./ lib / refcounted.h:112:2:error:class 'mysqlpp :: RefCountedPointer'没有任何字段 名为'refs_'./lib/refcounted.h:115:8:错误:'refs_'不是 在此范围内声明./lib/refcounted.h:在析构函数中 “mysqlpp :: RefCountedPointer ::〜RefCountedPointer()”: ./lib/refcounted.h:125:7:错误:'refs_'未在此声明 scope ./lib/refcounted.h:在成员函数'void中 mysqlpp :: RefCountedPointer :: swap(mysqlpp :: RefCountedPointer :: ThisType&)':./ lib / refcounted.h:246:13:错误:'refs_'是 未在此范围内声明make:*** [mysqlpp_sql_buffer.o]错误1
我对C ++并不熟悉,所以我不确定错误究竟意味着什么。如何从这一点获得Mysql ++设置的任何帮助或指导将非常感激。虽然,我承认我也开始寻找可供使用的替代库。
答案 0 :(得分:8)
导致此问题是因为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 ++。
答案 1 :(得分:1)
您需要安装标头(dev)文件,我假设其中一个:
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
不应该是必需的,因为文件将安装在默认位置。