2019.12.3C++学习笔记——Linux系统C++链接动态库和操作数据库

近期工作要求操作数据库并转换Json格式计算Mac值,因为所给的接口库为so库,所以要在Linux系统下编写主程序。

之前已经在工作中接触了Windows系统下的C++操作数据库、Json.cpp调用和链接动态库,这次在Linux下重新编译需要一些改动。

Linux系统C++链接动态库

在Linux系统中,如果没有安装带UI的编译工具软件的话就无法像在Windows下一样直接在项目属性页中添加依赖库和附加依赖目录,需要使用g++编译器在命令行中进行链接,具体步骤为在g++编译项中添加 -l 库指令和 -L 库路径指令。

编译时的指令为:

g++ 工程路径/xxx.cpp -o test(应用程序名) -l库名称 -L LD_LIBRARY_PATH

在Linux中动态库路径的设置有好几种方法,其中我了解到的有两种:添加到默认lib文件夹和export动态库路径。

第一中是将需要链接的so库加入Linux下的 /usr/lib/ 或 /usr/lib/bin/ 文件夹中,这是Linux下编译器的默认库路径,编译时可直接链接到动态库,缺点是会使系统文件夹变大变乱。

第二种是在代码编译过程中导出一个设定好的动态库路径,具体操作为:
1.将要链接的so库加入选择好的路径中
2.在命令行中设置LD_LIBRARY_PATH,额外的动态库路径:

export LD_LIBRARY_PATH=动态库路径/:$LD_LIBRARY_PATH

3.进行g++编译(代码如上)
4.推荐编译运行完成后清除刚刚设置的LD_LIBRARY_PATH,因为此变量为全局变量,不清除说不定会出问题。

unset LD_LIBRARY_PATH

如果是要链接多个动态库也很方便,只需要保证需要的库在一个文件夹中,即同一个LD_LIBRARY_PATH中,则可直接一次性链接多个动态库。

g++ ./xxx.cpp -o test -l库a -l库b -L LD_LIBRARY_PATH

P.S.不知道为何,我想在网上看到别人的教程中,g++编译项的参数中附加依赖库项都是如上的-l库名称,但是我在自己编译过程中这样操作却会显示找不到 l库名称的so库,反而要将其改为(没有前面的短杠)lib库名称.so(即库的完整名称: lib库名.so)才可编译成功。

g++ ./xxx.cpp -o test lib库名.so -L LD_LIBRARY_PATH

Linux系统C++操作数据库

Linux系统下C++操作数据库的代码部分与Windows下基本一样,需要注意的是C++操作数据库所必须的头文件和动态库位置。
Linux系统中,如果安装了mysql后,则可以在/usr/include/mysql中找到需要的mysql.h头文件,在/usr/lib64/mysql中找到需要的so库。

扫描二维码关注公众号,回复: 8979836 查看本文章

如果系统中已安装了mysql,则似乎可以不使用与Windows一样的链接动态库调用接口的方式连接到mysql,好像可以通过类似mysqlclient.conf的指令在Linux命令行中直接连接到mysql,但是我没有去详细了解。

我因为要连接的mysql数据库不是本机的数据库,所以自己电脑上的Linux虚拟机没有特意安装mysql,这时就需要跟Windows系统下一样的链接过程:
C++链接mysql
主要就是添加头文件和链接mysql客户端so库。

头文件方面不再仅仅需要一个mysql.h了,因为我编译时发现需要将最好将/usr/include/mysql/中的所有.h文件添加到工程文件夹中,只添加一个mysql.h会无法包括到mysql.h头文件所包含的头文件。
库方面比较方便,只需要/usr/lib64/mysql/文件夹中的一个 libmysqlclient.so的文件(可能在同一路径下有好几个后缀版本不同的libmysqlclient.so库,可以逐一试试,有一个是正确的),然后将其按上面的方法加入工程文件夹并链接即可。

总体来说,Linux环境下未安装mysql数据库时想要编译C++操作mysql的工程,你只需要有mysql数据库的整个include文件夹和一个libmysqlclient动态库即可。

发布了25 篇原创文章 · 获赞 6 · 访问量 1420

猜你喜欢

转载自blog.csdn.net/weixin_43948991/article/details/103375105