我正在尝试开始使用 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/