C++ 在include之后找不到sql函数
我一直在MacOSX上用c编写一个基本的服务器/客户端程序,当我试图将服务器链接到mysql数据库时,我遇到了严重的问题。我检查了sql头文件,它有编译器找不到的所有函数声明。我下载了一个连接器,专门针对x86_64体系结构,使用它会产生相同的错误 考虑以下代码:C++ 在include之后找不到sql函数,c++,mysql,c,macos,C++,Mysql,C,Macos,我一直在MacOSX上用c编写一个基本的服务器/客户端程序,当我试图将服务器链接到mysql数据库时,我遇到了严重的问题。我检查了sql头文件,它有编译器找不到的所有函数声明。我下载了一个连接器,专门针对x86_64体系结构,使用它会产生相同的错误 考虑以下代码: #include <mysql/mysql.h> #include <mysql/my_global.h> int main(int argc, char const *argv[]) { //Cre
#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);
}
}
如果您有任何关于这里出了什么问题的帮助,我们将不胜感激 MySQL文档特别解释了如何将您的程序与MySQL链接。这是从上面的链接粘贴的副本:
mysql_config显示编译或链接所需的选项:
shell> mysql_config --cflags
shell> mysql_config --libs
您可以运行这些命令以获得正确的选项,并手动将它们添加到编译或链接命令中。或者,使用backticks将mysql_config的输出直接包含在命令行中:
shell> gcc -c `mysql_config --cflags` progname.c
shell> gcc -o progname progname.o `mysql_config --libs`
如果你使用C++(你的C和C++都是你的标签),你当然想用<代码> G++< /C> >代替<代码> GCC < /> >,当然也要用<代码> > CXFLASKS。头文件告诉编译器关于这些函数的信息,但是链接器还需要找到它们的实际实现。您从此处的链接器(ld)收到错误。您使用的是预编译头吗?@Yunnosch是的,我使用的是预编译头headers@CrisLuengo我确信我可以从那里将库链接到标题。您能详细说明一下吗?在命令行中添加
-l
。在Xcode中,我确信有一个地方可以指定要链接到的库。请参阅文档以了解其位置。请参阅MySQL文档,了解您需要链接到哪个库。我没有用过MySQL,所以我不知道。但我确实认识到一个错误:“ld:symbol(s)not found”表示您没有链接到所需的库。这解决了我的问题+1为了简洁和简单的回答,因为在我的例子中,标志已经包含在sql头中,gcc-o程序progame.cmysql\u config--libs
为我完成了这项工作。只是另一种选择
shell> gcc -c `mysql_config --cflags` progname.c
shell> gcc -o progname progname.o `mysql_config --libs`