mysql - 找不到 libmysqlclient.a

标签 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

(我避免使用系统上的许多符号链接(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'

但是that can be fixed with

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

关于mysql - 找不到 libmysqlclient.a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15958612/

相关文章:

mysql - 在 WAMP 中更改 MySQL root 密码后无法连接

python - 使用 Python 启动临时 MySQL 服务器

Ruby eventmachine 编译错误

c++ - C++ 中的纯/常量函数

gcc - CMake 可以使用 g++ 来编译 C 文件吗?

mysql - 了解 MySQL 查询

python - 在 SQLAlchemy 中按子查询排序

c++ - std::get_time 有错误吗?

mysql - 检测两个 MySQL 列中的重复项(分散在列中的唯一值)

c++ - 从 lambda (C++) 创建的 std::function 的奇怪返回行为