mysql cprogi fordítása

Fórumok

Sehogy nem akarműködni egy nagyobb fejlesztés. Írtam egy minimál progit, hogy kiderítsem mi a baj, de értetlenül állok a dolog előtt.

#include < stdio.h >
#include < stdlib.h >
#include < mysql/mysql.h >

int main()
{
MYSQL mysql;

if (!(mysql_connect(&mysql,"host","username","password")))
fprintf( stderr, "%s\n", mysql_error(&mysql) );

mysql_close(&mysql);
}

így fordítom:
gcc conntest.c -o conntest -lmysqlclient

és erre egy undefined reference-t kapok a mysql_connect-re. ( undefined reference to `mysql_connect')
ldconfig -v|grep mysql kimenete:
libmysqlclient.so.15 -> libmysqlclient.so.15.0.0
Header állományok szépen megvannak az /usr/include/mysql alatt.

Ötletek?

Hozzászólások

Update: a mysql_real_connect használatával megoldódik a probléma

Tedd fel a libmysql1.+-dev nevű csomagot, abban van egy mysql_config nevű utility, azt futtatva megmondja neked, milyen opciókkal kell fordítani.

probald meg a


gcc conntest.c -o conntest -lmysqlclient

helyett csak sima'n a


gcc conntest.c -o conntest -lmysql

forditatst. Illetve, hogy egyes fv-ek (mint ahogy elobb irta'k) leteznek-e, vagy sem, az mar _forditasi_ idoben is kideritheto:


gcc -Wall -pedantic -ansi -O3 -D_GNU_SOURCE akarmi.c -o ... ...

ekkor beszo'l a fordito (warning es/vagy error), ha ismeretlen prototipussal hivsz meg valamit (azaz nem is letezik, nincs benne az adott header-ben, stb).

A kliensapi valoban sokat valtozik, de pont erre nem emlekszem, hogy lett volna ilyen hogy egy adott konyvtari fv (mysql_connect()) egyszercsak megszunik letezni. az remlik hogy mysql{3,4} -> mysql5 a'ttereskor a makefile-ba kellett beleturni...

A.

>> egy adott konyvtari fv (mysql_connect()) egyszercsak megszunik letezni

:/usr/lib# nm -D libmysqlclient.so.10 | grep "mysql_co"
00008920 T mysql_connect
:/usr/lib# nm -D libmysqlclient.so.12 | grep "mysql_co"
:/usr/lib# nm -D libmysqlclient.so.14 | grep "mysql_co"
00010840 T mysql_commit

Mint már fent írtam végülis megoldódott a probléma. Egy-két forrásállományban át kellett írni a régi hívásokat (mysql_connect) az újakra (mysql_real_connect). És ezzel hokés is lett az egész.
Bár a mysql.h-ban leírtask alapján az én olvasatom szerint lehetséges USE_OLD_FUNCTIONS-szal is fordítani, de azzal sem működött. Egyébbként az egész egy RH3-as RH4-re való update-je után jött elő (és persze a mysql update után).
Végül miután nem működött a -DUSE_OLD_FUNCTIONS kénytelen voltam átírni a kódot.
Most már csak a többi fejlesztésnél kell végigbogarásznom a kódokat. :)