MySQL szerver elérés C-ből

 ( stage81 | 2005. február 14., hétfő - 13:54 )

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Sziasztok!

Frissen feltelepítettem a Red hat 9-et, és elindítottam rajta a mysqld-t. A feladatom az, hogy c-ből elérjem a mysql szerver adatbázisait, tábláit, lekérdezések eredményét változóba tároljam, szóval teljesen általános dolgok.
A mysql-hez símán hozzáférek a ./mysql-en keresztül, viszont C-ből nem tudom elérni! Figyeltem a fórumot, és találtam pár ilyen jellegű témát... ki is próbáltam amit írtak (gy, airween). Sajnos még a mysql_init(&conn); is hibát jelez! De inkáb leírom a próba forráskódom:

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

int main(){
MYSQL conn;

mysql_init(&conn);

return 0;
}

Visszatérő hibaüzenetem fordításnál:

/tmp/ccw19iYR.o(.text+0x1e): In function 'main':
:undefined reference to 'mysql_init'
collect2: ld returned 1 exit status

Ja! és ezt az egészet root-ként próbálgatom.
Ha valaki tudja, hogy ezt miért írja ki, akkor légyszi közölje! Nagyon megköszönném!

S81

Szerintem a forditaskor lemaradt a -lmysql kapcsolo. Illetve az elso include rossz, ! hleyett / kene.

Köszike!

A kapcsolót tényleg nem írtam be (nem tudtam róla), a !-jel pedig elírás. Köszi mind a kettőért! Kipróbálom, és jelentkezek!

Üdv
S81

Még annyit: hogyan kell megadni a -lmysql kapcsolót?

gcc -o -lmysql m mprob1.c
??

Bocsi, de nagyon kezdő vagyok linuxon (-1 manus Microsoftéknál) :-)

gcc -o valami valami.c -lmysql -W -Wall

Ezt tudom ajanlani, amugy man gcc meg man ld. Ott le van irva melyikkapcsolo mire valo. Talan meg a HUpWikiben is van programozasrol szo.

Ezt írtam be:

gcc -o m mprob1.c -lmysql -W -Wall

Hibaüzenet:

/usr/bin/ld: cannot find -lmysql
collect2: ld returned 1 exit status

Valamit be kellene még állítani?

Most megnéztem a man gcc-t. Nem mondom szép ... Angol tudás nélkül úgy látom nagyon nehéz lesz... Nem tud valaki esetleg egy jó angol könyvet is? :wink:

Üdv: S81

hello,

[quote:3087b567a9="stage81"]Ezt írtam be:

gcc -o m mprob1.c -lmysql -W -Wall

[/quote:3087b567a9]

a -llib-et a sor vegere kell - mintha lenne vmi ilyesmi szabaly.

tehat:
[code:1:3087b567a9]
gcc -Wall mprob1.c -o m -lmysql
[/code:1:3087b567a9]

ill. nézd meg, hogy hol van a libmysqlclient.a file: /usr/lib/ alatt, vagy /usr/local/lib alatt. Ha ott nincs, akkor a gcc-nek meg kell adni a -L kapcsoloval a teljes eleresi utat - csak a könyvtárat.

a.

Meg kell a -dev csomag is, ha nem tévedek. Valami ilyesmi néven futhat, hogy libmysqlclient-dev, vagy libmysqlclientXX-dev talán.

Már szégyenlem, de így sem megy :cry:
a libmysqlclient.a-t a /usr/lib/mysql könyvtárban találtam meg. Így azt írtam be:
gcc -Wall mprob1.c -o m -lmysql -L /usr/lib/mysql

Hibaüzenet:
/usr/bin/ld: cannot find -lmysql
collect2: ld returned 1 exit status

Ui.: Köszi, hogy segítesz

Siromega:
Csak .a és .so kiterjesztésű libmysqlclient-et találtam. Devet sajnos nem (Így adtam meg keresési feltételnek: libmysqlclient*)

[quote:2d3360960d="stage81"]
gcc -Wall mprob1.c -o m -lmysql -L /usr/lib/mysql
[/quote:2d3360960d]
Hello!

Ez esetben arra tippelnek, hogy a -L utan kozvetlenul
(szokoz nelkul add meg a konyvtarat, ill. ugyanez vonatkozik
a -I -re is - hogy egy kicsit preventiv legyek ;-))

csg

Köszi csg a tippet!
Próbáltam, de nem jött össze... Egyébként megfigyeltem, hogy bárhogy írom a -l mysql-t hibaüzenetként egybe adja vissza így: -lmysql :wink: Hiába püfölöm azt a space-t

Igen a -l nem mindegy hol all az a legvegere keruljon.

En irtam rosszul bocs.

gcc -W -Wall -o valami valami.c -lmysql

A -L utan nem kell space: -L/usr/lib

libmysql.so kell ha dinamukusan linkeled .a ha statikusan.

A -dev meg a csomagra vonatkozott ami tartalmazza ezeket a filekat, de ez disztribucio fuggo.

En azt irtam, hogy [b:079c897aca]hagyd ki[/b:079c897aca] a space-t - meg ha a zarojelezest
el is barmoltam. Meg1x osszefoglalva:

[code:1:079c897aca]
gcc -Wall mprob1.c -o m -L/usr/lib/mysql -lmysql
[/code:1:079c897aca]

Nálam a libmysqlclient10-dev csomag van fenn. Van mondjuk egy proba.c, az elején egy [code:1:8e714a270a]#include<mysql/mysql.h>[/code:1:8e714a270a]
Ugyanitt van egy Makefile:
[code:1:8e714a270a]
LDFLAGS = -lmysqlclient
CFLAGS = -Wall

proba:
[/code:1:8e714a270a]
Ezután egy 'make' szépen elkészíti a 'proba' nevű binárist.

Ja, és a -dev csomag alatt azt értettem, hogy fel van telepítve a (pl) libmysqlclient10-dev csomag. Ennek a tartalma: [url]http://packages.debian.org/cgi-bin/search_contents.pl?word=libmysqlclient10-dev&searchmode=filelist&case=insensitive&version=stable&arch=i386[/url]
Ez a woody csomagja, de nem hiszem, hogy mondjuk a redhat esetén nagyon mást kéne tartalmaznia.

Azt hittem kiborítottalak a h**** kérdéseimmel, és elmenekültél :wink:
Köszi a helyesbítést! A linkelés a -L? Azt hova kell tennem? Azt is a végére?
most valahogy így néz ki az egész:

gcc -W -Wall -o m mprob1.c -lmysql -L/usr/lib/mysql

Hibaüzenetem változatlanul ez marad:
/usr/bin/ld: cannot find -lmysql
collect2: ld returned 1 exit status

[quote:4a0d29c3d9="stage81"]
gcc -W -Wall -o m mprob1.c -lmysql -L/usr/lib/mysql

Hibaüzenetem változatlanul ez marad:
/usr/bin/ld: cannot find -lmysql
collect2: ld returned 1 exit status[/quote:4a0d29c3d9]

Szerintem -lmysqlclient

Siromega:

Kipróbáltam, amit írtál (-lmysqlclient) lefordította!! :D :D :D
Igaz, még nem csinál semmit a program, de ez már tök jó... mármint, hogy lefordult...
Köszönöm mindenkinek a segítséget! Rendesek vagytok! Még jelentkezni fogok (valószínűleg megint lesznek hülye kérdéseim ) :wink:

Addig is sziasztok!
Üdv S81

[quote:97d3f0122a="siromega"]Szerintem -lmysqlclient[/quote:97d3f0122a]
Ott a pont... Ezt en is jol elneztem :oops:

[quote:e42300e214="stage81"]
Kipróbáltam, amit írtál (-lmysqlclient) lefordította!! :D :D :D
Igaz, még nem csinál semmit a program, de ez már tök jó... mármint, hogy lefordult...
[/quote:e42300e214]
Érdemes rászokni a make-re. Jóság 8)

Mi az a make?

Egy nagyon jó programfejlesztést segítő eszköz. Főleg akkor könnyíti meg a fordítást, ha bonyolultabb programról van szó, mint egy gcc -o foo foo.c. A ''Makefile''-ban van leírva a ,,recept'', hogy mit csináljon.
A man és az info oldalakon megtalálható minden.

Mégegyszer köszönöm. Innen remélhetőleg menni fog minden.
Akkor ezt a man-t meg info-t nem felejtem el használni :wink:
Üdv:
S81