libmysqlclient.a无处可寻

时间:2013-04-11 20:49:58

标签: mysql g++

在Amazon EC2上(uname -r给出“3.4.37-40.44.amzn1.x86_64”,我听说它是​​基于Cent OS的)我尝试安装:

yum install mysql
yum install mysql-devel

甚至

yum install mysql-libs

(由于this thread。)

我正在尝试编译程序并将MySQL库链接到它。这在我的Mac上运行正常(但Mac libmysqlclient.a)。 libmysqlclient.a绝对无法在这台机器上找到。它只有libmysqlclient.so,以及它的许多版本。

$ sudo find / -name libmysqlclient*

给出

/usr/lib64/mysql/libmysqlclient_r.so
/usr/lib64/mysql/libmysqlclient.so
/usr/lib64/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.so.18.0.0
/etc/alternatives/libmysqlclient
/etc/alternatives/libmysqlclient_r

ls -l /usr/lib64/mysql

给出

lrwxrwxrwx 1 root root      34 Apr 11 19:21 libmysqlclient_r.so -> /etc/alternatives/libmysqlclient_r
lrwxrwxrwx 1 root root      32 Apr 11 19:21 libmysqlclient.so -> /etc/alternatives/libmysqlclient
lrwxrwxrwx 1 root root      24 Apr 11 18:24 libmysqlclient.so.18 -> libmysqlclient.so.18.0.0
-rwxr-xr-x 1 root root 2983360 Mar 14 10:09 libmysqlclient.so.18.0.0
-rwxr-xr-x 1 root root   11892 Mar 14 09:12 mysqlbug
-rwxr-xr-x 1 root root    7092 Mar 14 10:08 mysql_config

所以唯一的真实文件是libmysqlclient.so.18.0.0

编译器命令:

g++ main.cpp -L/usr/lib64/mysql -lmysqlclient.so.18.0.0

失败
/usr/bin/ld: cannot find -lmysqlclient.so.18.0.0
collect2: ld returned 1 exit status

所以有人在撒谎,或者我在YUM回购中完全被扯掉了,并没有像我应该的那样给我libmysqlclient.a

(我避免在系统上使用许多符号链接,因此我可以消除可能的问题)。

3 个答案:

答案 0 :(得分:4)

bobobobo!你是错误

首先,当你有.so文件时,你不需要libmysqlclient.a文件。 The .a file is for static linking, .so file for dynamic linking.。 .so文件决定更好,让你感觉很酷。

在没有库链接的情况下尝试编译时遇到的问题是

g++ main.cpp

给出

undefined reference to `mysql_init'

但是that can be fixed with

g++ main.cpp `mysql_config --cflags --libs`

答案 1 :(得分:2)

解释:“.so文件决定更好,让你感觉很酷。”,请。 看看agner雾手册,.a库,看着性能水平,甚至更好。当你只需要2或3个函数时,你不需要将库加载到内存中......

答案 2 :(得分:1)

当您使用.so时,它们与运行时链接。这使您编译的代码更小。这些天通常不是很重要。真正伟大的功能是,当您更新系统并更新库时,您将链接到新的(并且希望)更好的库。更新通常包含错误修复和安全修复程序。可能性能改进。因此,它们使您的代码更加酷,并间接地使您更酷。