mySQL 和 C 的麻烦

标签 mysql c

我正在尝试开始使用 mySQL C API 来完成我希望完成的项目。

我已从官方网站下载了 mySQL Community Server 版本和 mySQL Connector/C。

Q1:我还需要下载Connector/ODBC吗?有什么区别?

所以,这是我学习并正在尝试编译和链接的一个基本程序:

#include<stdio.h>
#include<mysql.h>

int main(int argc, char **argv)
{
    printf("MySQL client version: %s\n", mysql_get_client_info());

    exit(0);
}

我对于应该使用哪些编译和链接命令感到非常困惑。当我执行以下操作时,会发生这种情况:

gcc mySQL.c -I/usr/local/mysql/include
Undefined symbols for architecture x86_64:
  "_mysql_get_client_info", referenced from:
      _main in mySQL-a3f748.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

有人可以帮我解决这个问题吗?我经历了很多挣扎,这一切似乎都非常令人困惑。

我的问题是关于编译和链接 mySQL C API 库而不是错误。

最佳答案

头文件<mysql.h>声明所需的函数和类型。实际的函数定义(其实现)位于您需要链接的库中。

您可以使用-l来做到这一点(小写 L)选项:

gcc mySQL.c -I/usr/local/mysql/include -lmysql

但是,由于您似乎已将 MySQL 安装在非标准位置,因此您可能必须使用 -L指定库所在位置的选项(类似于 -I 选项):

gcc mySQL.c -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysql

这至少应该能让你的程序构建起来。但是,如果您的 MySQL 库不是静态库而是动态库(即“DLL”),则可能会出现另一个问题,因为运行时加载程序不会知道动态库的位置。您还需要一个特殊的链接器标志:

gcc mySQL.c -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysql -Wl,-rpath=usr/local/mysql/lib 

关于mySQL 和 C 的麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43435735/

相关文章:

php - 从多个表中获取数据到单行同时

mysql - 在sql中创建四个过滤器

mysql - SQL SELECT(多-2-多)

php - post数组空提交

java - 什么是 Java 堆栈与 native 内存的映射。

c - 当子进程上有 SIGINT (Crtl+c) 时,waitpid 返回 0

无法在结构中存储值(C 套接字编程中的服务器)

MySQL 查询公司 AVG

c - 以列表形式访问整数

c - C中没有strcat的字符串连接