tags:

views:

252

answers:

2

I'm trying to write a simple script for C to get values from a MySQL database, but it's throwing this error 'undefined reference to `_mysql_init@4''

Don't know if I'm not linking to something I should be? My C knowledge is limited...

I'm using Code Blocks on Windows, here's my code:

#include <winsock.h>
#include <C:\mysql\include\mysql.h>
#include <stdio.h>
#include <string.h>

int main()
{
   MYSQL mysql;
   MYSQL_RES *res;
   MYSQL_ROW row;

   char query[80];
   mysql_init(&mysql);
   mysql_real_connect(&mysql,"localhost","user","pass","db",0,NULL,0);
   sprintf(query,"SELECT src,dst FROM ipaudit");
   mysql_real_query(&mysql,query,(unsigned int)strlen(query));
   res = mysql_use_result(&mysql);
   while(row = mysql_fetch_row(res))
    printf("%s %sn",row[0],row[1]);
   mysql_free_result(res);
   return 0;
}
+3  A: 

That's a linker error, indicating that the linker can't find the function mysql_init.

Make sure you are linking to libmysql.lib or mysqlclient.lib. You also need to include <my_global.h> when building on Windows (see that same page in the MySQL Manual).

James McNellis
Hi James, Thanks for your reply. I'm going to have to ask the dumb question. How do I link the libmysql.lib? With an #include?
logic-unit
In your Code::Blocks Compiler Settings, under Directories > Linker, add the folder where the MySQL libraries are located. Then in your project build options (Linker tab) add the proper libraries to the Link libraries list.
Adam Maras
Nice one! Thanks James!
logic-unit
@Adam Maras: Thanks a lot; I've never used CodeBlocks and as such had no idea on that one :-). @logic-unit: You're welcome.
James McNellis
Thanks too Adam!
logic-unit
+2  A: 

undefined reference refers to a problem with the linker. The function mysql_init() is not part of your code and is already compiled in a library. You have to tell the linker to include the code for that function by specifying the library where said code is.

I don't know how to specify libraries in Code Blocks, sorry

Edit

A quick Google search for how to specify libraries in Code Blocks returned a interesting result :)

pmg
Ah brilliant! Thanks pmg, i'll try that...
logic-unit
That website is great. Thanks for your help - problem now fixed.
logic-unit