在 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
。
(我避免使用系统上的许多符号链接(symbolic link),这样我就可以消除可能的问题)。
最佳答案
波波波波!你太错了。
首先,当你有 .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`
关于mysql - 找不到 libmysqlclient.a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15958612/