MySQL连接器/ C ++
用于C和C ++应用程序的MySQL连接器库
使用连接器/ C ++ 8.0

Connector/ c++ 8.0实现了新的api来访问MySQL Server 8的文档存储:X DevAPI用于用c++ 11编写的应用程序,X DevAPI用于用C编写的应用程序。相同的api也可以用于执行传统的SQL查询。连接器/ c++ 8.0还实现了基于JDBC4的遗留c++ API, JDBC4向后兼容连接器的1.1版本。

通过包括适当的公共标题来完成API的选择。对于X devapi包括:

#include

对于X DevAPI的C包括:

# include < mysqlx / xapi.h >

对于遗留API包括:

# include < jdbc / mysql_driver.h >
#include
# include < jdbc / cppconn / * . h >

前面包括在假设包括路径包含的假设下的指令$ MYSQL_CPPCONN_DIR /包括, 在哪里$ mysql_cppconn_dir.是安装了连接器/ C ++的位置。通过-i $ mysql_cppconn_dir /包含选项以确保这一点。

笔记
使用连接器/ C ++ 1.1的遗留代码包括表单
# include < mysql_driver.h >
#include
# include < cppconn / * . h >
使用连接器/ C ++ 8构建此类代码而不修改它,添加美元MYSQL_CPPCONN_DIR / include / jdbc到包括路径。

x devapi使用C ++ 11语言功能。因为这个原因,使用Compiler在编译器中支持C ++ 11化c++ 11建立使用x devapi的代码时的选项。对于C(这是普通的CAPI)的X Devapi,不需要这是基于普通C ++的传统JDBC API所需的。

使用共享库

根据平台,共享连接器/ C ++库被命名为:

  • libmysqlcppconn8.so在Unix平台上(Sonamelibmysqlcppconn8.so.1
  • libmysqlcppconn8.dylib.在OSX平台上(链接名称libmysqlcppconn8.1.dylib
  • mysqlcppconn8-1-vsxx.dll.在Windows平台上(使用导入库vsxx / mysqlcppconn8.lib)

这个库实现了新的X DevAPI和用于C的X DevAPI。连接器/ c++ 8.0还包含了遗留的连接器库libmsysqlcpconn(.so / .dylib / .dll)它实现了遗留JDBC4 API。

要构建使用新api的代码,请添加-lmysqlcppconn8.到链接器选项(添加-lmysqlcppconn.在构建遗留代码时)。这需要美元MYSQL_CONCPP_DIR / lib美元MYSQL_CONCPP_DIR / lib64(将在64位平台上的后者)添加到链接器路径(-l $ mysql_cppconn_dir / lib64链接器选项)。

由于不同编译器版本之间的ABI不兼容,使用连接器/ C ++库的代码应使用与连接器本身相同的编译器版本构建。可以在内部找到用于构建连接器库的编译器版本的信息info_bin.与连接器一起分发的文件。原则上,可以使用不同版本的编译器,只要它是ABI兼容的,但是很难确定哪个版本的编译器彼此是ABI兼容的。

一个例子Makefile构建使用连接器/ C ++ X devapi的应用程序,其中包含app.cc如下所示:

MYSQL_CONCPP_DIR =…
cppflags = -i $(mysql_concppp_dir)/ compress -l $(mysql_concpppp_dir)/ lib64
ldlibs = -lmysqlcppconn8.
CXXFLAGS =化= c++ 11
应用:app.cc

它生成以下编译器调用:

g++ -std=c++11 -I…包括- l……/lib64 app.cc -lmysqlcppconn8 -o app
笔记
为了链接旧版C ++ JDBC4库库名称是-lmysqlcppconn.。此外,选择化c++ 11除非用户代码利用C ++ 11,否则可以省略。

连接器也可以与普通的C代码一起使用,编写针对C的X Devapi。一个例子Makefile来构建一个普通的C应用程序app.c.可能是这样的:

MYSQL_CONCPP_DIR =…
cppflags = -i $(mysql_concppp_dir)/ compress -l $(mysql_concpppp_dir)/ lib64
ldlibs = -lmysqlcppconn8.
应用程序:app.c.

它生成以下编译器调用:

CC -I ...... /包括-L ... / lib64 app.c -lmysqlcppconn8 -o app

请注意,结果代码,即使它被编译为普通C,也将取决于C ++运行时(libstdc + +)。

笔记
当运行一个使用共享的Connector/ c++库的应用程序时,动态连接器必须找到这个库及其运行时依赖项。动态链接器必须正确配置以查找Connector/ c++库及其依赖项。
MySQL构建的连接器/ c++库依赖于OpenSSL库。为了运行连接到Connector/ c++库的代码,必须在系统上安装后者。另一种选择是将OpenSSL库放在与Connector/ c++相同的位置。在这种情况下,动态连接器应该在连接器库旁边找到它们。

使用静态库

可以将您的应用程序与静态连接器库链接起来。这样,就没有了对连接器的运行时依赖,生成的二进制文件可以在没有安装connector / c++的系统上运行。

笔记
但是,即使在静态链接时,生成的代码仍然取决于openssl库和连接器/ c ++库的所有其他运行时依赖性。

当编译与连接器库静态链接的代码时,定义static_concpp.在包括连接器/ C ++公共标题之前的宏。此宏调整标题中的API声明以使用静态库。

笔记
对于遗留API,可以定义cppconn_public_func.它是空宏(与使用静态连接器/ C ++ 1.1库相同的方式)

静态库名称是:

  • libmysqlcppconn8-static.a在OSX和Unix平台上。
  • mysqlcppconn8-static.lib.lib.在Windows平台上。

遗留的静态库名称是libmysqlcppconn-static.a.mysqlcppconn-static.lib.lib., 分别。

一个例子Makefile要构建一个C ++应用程序,可静态显示与连接器库的链接如下所示:

MYSQL_CONCPP_DIR =…
cppflags = -dstatic_concpp -i $(mysql_concppp_dir)/包含
LDLIBS = $ (MYSQL_CONCPP_DIR) / lib64 / libmysqlcppconn8-static。一个-lssl -lcrypto -lpthread
CXXFLAGS =化= c++ 11
应用:app.cc

它生成以下编译器调用:

g ++ -std = c ++ 11 -dstatic_concpp -i ... /包含app.cc ... / lib64 / libmysqlcpconn8-static.a -lssl -lcrypto -lpthread -o app
笔记
为了链接旧版C ++ JDBC4库库名称是-lmysqlcppconn.。此外,选择化c++ 11可以省略,除非用户代码需要c++ 11。

请注意,我们需要添加到编译行“openssl库和连接器/ c ++代码所取决于的pthread库。否则,链接器报告未解决的符号。

笔记
显然,如果在没有它们的情况下建立连接器/ C ++,则不需要OpenSSL库。但MySQL构建和分发的连接器/ C ++取决于OpenSSL。
连接器/ C ++库所需的库的确切列表取决于平台。例如在Solaris上套接字RT.NSL.可能需要图书馆。

构建简单的C代码时是很重要的另外照顾连接器依赖c++运行时,由连接器介绍图书馆即使代码使用它是纯C。一种方法是确保一个c++链接器是用来构建最终的代码。本例中采用了这种方法Makefile下图:

MYSQL_CONCPP_DIR =…
cppflags = -dstatic_concpp -i $(mysql_concppp_dir)/包含
LDLIBS = $ (MYSQL_CONCPP_DIR) / lib64 / libmysqlcppconn8-static。一个-lssl -lcrypto -lpthread
链接。o = $(LINK.cc) #使用c++链接器
应用程序:app.o.

用这个Makefile构建过程有两个步骤:首先是应用程序来源app.c.使用Plain C编译器编译,然后使用C ++链接器链接最终可执行文件,该链接将根据C ++运行时处理依赖项:

cc -dstatic_concpp -i ... in ... / compnest -c -o app.o app.c
g ++ -dstatic_concpp -i ... /包含app.o ... / libmysqlcppconn8-static.a -lssl -lcrypto -lpthread -o app

另一种方法是使用普通的C编译器和链接器,但添加c++运行时库libstdc + +作为链接器的显式输入:

MYSQL_CONCPP_DIR =…
cppflags = -i $(mysql_concpppp_dir)/包含
ldlibs = $(mysql_concpp_dir)/lib64/libmysqlcppconn8-static.a -lssl -lcrypto -lpthread -lstdc ++
应用程序:app.c.

用这个Makefile编译器的调用方法如下:

cc -DSTATIC_CONCPP -I…/包括app.c…/ libmysqlcppconn8-static。-lssl -lcrypto -lpthread -lstdc++ -o应用程序
笔记
即使使用连接器/ C ++的应用程序是在Plain C中编写的,最终可执行文件也取决于C ++运行时,该运行时必须安装在应用程序运行的目标计算机上。

有关使用连接器/ C ++的建筑代码的更多信息咨询我们的在线文档10bet官方网站