Witam,

Stoworzyłem najprostszą aplikację w c++ z użyciem MySQL.
Kod (raczej nie istotny):

#include <stdio.h>
#include <sys/time.h>
#include <mysql.h>
#include <string>
#include <sstream>

int main(int argc, char* argv[])
{
	MYSQL mySql, *pConnection;	
	mysql_init(&mySql);

	pConnection = mysql_real_connect(&mySql, "localhost", "root", "123456", "Test",0,0,0);
	mysql_query(pConnection, "CREATE TABLE testowa ( id INT, number INT );");

	std::stringstream query;

	for (int i = 0; i < 5000; ++i)
	{
		query.clear();
		query << "INSERT INTO testowa VALUES('";
		query << i << "', '" << i%10 << "');";
		mysql_query(pConnection, query.str().c_str());
	}

	mysql_close(pConnection);

	return 0;
}

Otóż podczas próby kompilacji napotkałem problemy z linkerem. Konkretniej powszechnie znane "undefined reference to ...":

main.cpp:(.text.startup+0x2d): undefined reference to `mysql_init'
main.cpp:(.text.startup+0x6f): undefined reference to `mysql_real_connect'
main.cpp:(.text.startup+0x83): undefined reference to `mysql_query'
main.cpp:(.text.startup+0x108): undefined reference to `mysql_query'
main.cpp:(.text.startup+0x2a8): undefined reference to `mysql_close'

Kod jest kompilowany taką komendą:

g++ -Wall -I /usr/include/mysql -I ./include -O2 -c -o obj/x86/Release/main.o src/main.cpp
g++ -Wall -L/usr/lib/i386-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl -O2 -o bin/x86/Release/Application.out obj/x86/Release/main.o

Wewnętrznie makefile korzysta z wartości zwróconej przez 'mysql_config --libs' do podpięcia bibliotek.

Output z 'mysql_config --libs':
-L/usr/lib/i386-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl

Linker nie wyrzuca żadnych błędów oprócz "undefined reference to ...", więc libki ładują się raczej poprawnie.

W google nie udało mi się znaleźć żadnych pomocnych informacji. Próbowałem wykasować i zainstalować ponownie powiązane pakiety (gdzieś w internecie o tym wyczytałem), ale nie pomogło.

Z góry dzięki za pomoc.

EDIT: Namierzyłem błąd. Biblioteki trzeba podawać jako ostatni argument do linkera.