【发布时间】:2018-05-19 20:06:46
【问题描述】:
我一直在 MacOSX 上用 c 语言编写一个基本的服务器/客户端程序,当我尝试将服务器链接到 mysql 数据库时,我遇到了严重的问题。我检查了 sql 头文件,它包含编译器找不到的所有函数声明。我下载了一个专门针对 x86_64 架构的连接器,使用它时出现了同样的错误。
考虑以下代码:
#include <mysql/mysql.h>
#include <mysql/my_global.h>
int main(int argc, char const *argv[]) {
//Create the connector object
MYSQL *con = mysql_init(NULL);
if (con == NULL) {
fprintf(stderr, "%s\n", mysql_error(con));
exit(1);
}
//Connect to database
if (mysql_real_connect(con, "localhost", "username","password", NULL, 0, NULL, 0) == NULL) {
fprintf(stderr, "%s\n", mysql_error(con));
mysql_close(con);
exit(1);
}
}
编译时出现以下错误:
Undefined symbols for architecture x86_64:
"_finish_with_error", referenced from:
_main in ServerSocket-dbb1df.o
"_mysql_close", referenced from:
_main in ServerSocket-dbb1df.o
"_mysql_error", referenced from:
_main in ServerSocket-dbb1df.o
"_mysql_init", referenced from:
_main in ServerSocket-dbb1df.o
"_mysql_query", referenced from:
_main in ServerSocket-dbb1df.o
"_mysql_real_connect", referenced from:
_main in ServerSocket-dbb1df.o
"_mysql_store_result", referenced from:
_main in ServerSocket-dbb1df.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
任何关于这里出了什么问题的帮助将不胜感激!
【问题讨论】:
-
你使用的是预编译头文件吗?
-
@Yunnosch 是的,我使用的是预编译头文件
-
@Cris Luengo 我确定我可以从哪里将库链接到标题。能详细点吗?
-
如果您使用的是预编译头文件,您应该包含“stdafx.h”。请说明你在哪里做的。 (我假设您省略了该行以使您的代码示例更简洁。)包括它应该是第一个。