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?
- 1618 megtekintés
Hozzászólások
Update: a mysql_real_connect használatával megoldódik a probléma
- A hozzászóláshoz be kell jelentkezni
mivel megváltozott a client api mysql 4-től
mysql_connect helyett
mysql_init
mysql_real_connect a használandó
- A hozzászóláshoz be kell jelentkezni
Tedd fel a libmysql1.+-dev nevű csomagot, abban van egy mysql_config nevű utility, azt futtatva megmondja neked, milyen opciókkal kell fordítani.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
>> 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
- A hozzászóláshoz be kell jelentkezni
Erdekes... ezekszerint megiscsak elofordul ;)
Egyebkent a 12-es clientapi melyik kiada'shoz tartozott? ha jol remlik, a 3.x-az a 10-est hasznalta de a 4.x-esek ma'r a 14-est (es az 5.x a 15-ost).
- A hozzászóláshoz be kell jelentkezni
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. :)
- A hozzászóláshoz be kell jelentkezni