昨天写一段程序需要写db,调用了mysql的c api,编译发生了链接错误:
/usr/lib/mysql/libmysqlclient.a(ssl.o):(.gnu.linkonce.d.__vt_Q25yaSSL7Message+0x8): undefined reference to `__pure_virtual'
……
Makefile中的链接:…… -L/usr/lib/mysql -lmysqlclient
第一反应是安装的mysql devel与client的版本不对,仔细检查了一下当前的版本, rpm -q -a | grep MySQL看了下,
MySQL-devel-5.0.22-0
MySQL-server-community-5.1.59-1.sles10
MySQL-client-community-5.1.59-1.sles10
应该没啥问题,是mysql官网上的suse v10的最新发布版本了。 为了确保没有问题,特地重新安装了一遍,还是没有效果。
开始万能的google,翻到一篇靠谱的文章,说是要把mygcc给链进去,于是改成…… -L/usr/lib/mysql -lmysqlclient -lmygcc,重新编译了一把,错误少了很多,但是还有有如下错误:
/usr/lib/mysql/libmysqlclient.a(my_compress.o): In function `my_compress_alloc':
(.text+0xdb): undefined reference to `compress'
/usr/lib/mysql/libmysqlclient.a(my_compress.o): In function `my_uncompress':
(.text+0x16d): undefined reference to `uncompress'
这个仔细看一下,应该是gzip没有链接上,再加多一个-lz,改成 -L/usr/lib/mysql -lmysqlclient -lmygcc -lz重新编译搞定!或者不用-l,直接链接动态链接库: /usr/lib/mysql/libmysqlclient.a /usr/lib/mysql/libmygcc.a /usr/lib/libz.a,也编译通过。