不要问我开发Linux平台的C++项目为什么要在Viusal Studio中进行。或许是因为个人习惯问题吧,一直用惯了Visual Studio,或者是因为Windows中IDE的界面还是要比Linux中的IDE做得漂亮一些吧。
其实项目最初都还是很顺利的,程序的框架,流程,各种类,网络通信,都正常。随着功能的完善,必须要把访问数据库的功能添加进来时,问题就出现了,这个问题困扰了我两天时间,其实解决起来,就几分钟的事。在此分享出来,希望其他和我一样在用VS做linux的项目访问mysql数据库时少走一些弯路。
至于linux平台中的mysql安装配置,就不在此啰嗦了,网上可以搜出一大堆来。
遇到的问题其实有两个:
第一个问题是 #include <mysql/mysql.h> 报错,无法找到头文件。
其实引起这个问题的原因也很低级的,因为我的程序是做了很久再添加数据库功能时遇到的,mysql是后来安装配置的,而在VS中的跨平台的连接linux主机配置是早就做好了的,如果是顺序倒过来,很早就安装了mysql,且安装了mysqlclient-dev,然后VS再连linux主机,就不会遇到这个问题。因为VS在配置跨平台的主机连接时,它实际上做了一件事,把linux中的头文件复制一份过来供VS使用,这也就是为什么在配置这个主机连接时,输入了用户名密码点连接,会有些反应迟钝的原因。我是先拷了头文件,再安装的mysql开发包,在拷的时候还没有mysql.h,当然会报错找不到头文件了。
解决的办法就是把原有的主机连接删除掉,然后重新连接一次,那些头文件就会被重新拷一次。然后你也就可以愉快的使用快速提示、自动补全了。
第二个问题是在编译时报错:undefined reference to 'mysql_init'
包括mysql的所有库函数都在编译时报错,这个问题也折腾了很久,因为前面的include过来了,但真正的lib还没有过来,所以老想着在编译选项里面加点什么,但一直不管用,参考了网上的一篇文章:https://blog.youkuaiyun.com/howard789/article/details/86567963,也不管用。还有其他的一些文章,说的情况也和我这情况不一样,他们或者是VS做的Windows平台的C++程序去访问Linux平台的数据库,或是数据库mysql也是在Windows平台下的,没啥用。其实这个问题也很简单,在项目的属性里面把链接器的输入项的库依赖荐加上 mysqlclient 就可以了。