在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
。
(我避免在系统上使用许多符号链接,因此我可以消除可能的问题)。
答案 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'
g++ main.cpp `mysql_config --cflags --libs`
答案 1 :(得分:2)
解释:“.so文件决定更好,让你感觉很酷。”,请。 看看agner雾手册,.a库,看着性能水平,甚至更好。当你只需要2或3个函数时,你不需要将库加载到内存中......
答案 2 :(得分:1)
当您使用.so时,它们与运行时链接。这使您编译的代码更小。这些天通常不是很重要。真正伟大的功能是,当您更新系统并更新库时,您将链接到新的(并且希望)更好的库。更新通常包含错误修复和安全修复程序。可能性能改进。因此,它们使您的代码更加酷,并间接地使您更酷。