在 Amazon EC2 上(uname -r给出“3.4.37-40.44.amzn1.x86_64”,我听说它基于 Cent OS)我尝试安装:
yum install mysql
yum install mysql-devel
Run Code Online (Sandbox Code Playgroud)
乃至
yum install mysql-libs
Run Code Online (Sandbox Code Playgroud)
(由于这个线程。)
我正在尝试编译一个程序并将 MySQL 库链接到它。这在我的 Mac 上运行良好(但 Mac有 libmysqlclient.a)。 libmysqlclient.a在这台机器上绝对找不到。它所拥有的只是libmysqlclient.so,而且还有很多版本。
$ sudo find / -name libmysqlclient*
Run Code Online (Sandbox Code Playgroud)
给予
/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
Run Code Online (Sandbox Code Playgroud)
和
ls -l /usr/lib64/mysql
Run Code Online (Sandbox Code Playgroud)
给予
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
Run Code Online (Sandbox Code Playgroud)
所以唯一真实的文件是libmysqlclient.so.18.0.0.
编译器命令:
g++ main.cpp -L/usr/lib64/mysql -lmysqlclient.so.18.0.0
Run Code Online (Sandbox Code Playgroud)
失败与
/usr/bin/ld: cannot find -lmysqlclient.so.18.0.0
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
所以有人在撒谎,或者我在 YUM 仓库完全被骗了,并且没有得到我libmysqlclient.a应该得到的东西。
(我避免使用系统上的许多符号链接,这样我就可以消除可能的问题)。
波波波波!你错了。
首先,当您拥有 .so 文件时,您不需要 libmysqlclient.a 文件。 .a 文件用于静态链接,.so 文件用于动态链接。。.so 文件显然更好并且让你更酷。
当您尝试在没有库链接的情况下进行编译时遇到的问题是
g++ main.cpp
Run Code Online (Sandbox Code Playgroud)
给予
undefined reference to `mysql_init'
Run Code Online (Sandbox Code Playgroud)
但这可以解决
g++ main.cpp `mysql_config --cflags --libs`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11660 次 |
| 最近记录: |