Skocz do zawartości
Tirador

C++ / API / MySQL

Rekomendowane odpowiedzi

Witam. Usiłuję napisać program w C++ (na razie kombinuję z konsolą, ale później chciałbym napisać to dla Windows'ów), który łączyłby się z serwerem MySQL uruchomionym na moim kompie. Zainstalowałem sobie serwer, do projektu w C skopiowałem i dołączyłem pliki nagłówkowe (mysql.h i te, których on wymaga) i właściwie na tym kończą się moje sukcesy.

 

Oto, co piszę:

#include <iostream>#include <stdlib.h>#include "include/mysql.h"int main(){  MYSQL *myconnection = mysql_init(NULL);  system("PAUSE");	  return 0;}

A kompilator (Bloodshed DevC++) daje mi komunikat: [Linker error] undefined reference to `mysql_init@4'

 

Ktoś próbował kiedyś napisać taki programik? Mógłby podzielić się wiedzą?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Musisz dolaczyc jeszcze do projektu biblioteke z funkcjami mysql... libmysql.lib, poczytaj dokladniej w manualu, tam masz zreszta nawet przykladowe kody.

Nie wiem niestety jak sie w DEV-C++ dodaje lib'y, ale to IDE do gcc, wiec mozesz poprostu recznie dodac parametr -lmysql

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jest taka piosenka grupy Queen "I'm going slightly mad"...

 

Uspokoiłem się, zebrałem myśli i mogę napisać tego posta.

 

Zacznę od linków manuala, które mi wskazałeś (dzięki, że mnie nie zrugałeś "że sam nie poszukałem"). Zastanawiam się, czemu wszystkie źródła jakie znalazłem, łącznie z książką, którą znam już prawie na pamięć, traktują jedynie o Linuxie/Unixie. Wszędzie są podane przykładowe katalogi linuxowe, komendy linuxowe, tak jakby Windows wcale nie istniał. Może brzmi to śmiesznie (w końcu co za problem napisać "C:mysqllib" zamiast "/usr/lib/mysql"), ale gdy piszę na przykład '-L"C:mysqllib" -lmysqlclient -lz', DevCpp wywala mi, że nie może znaleźć -lz... Nic z tego nie rozumiem. Cała reszta poleceń również nie dotyczy Windowsa.

 

Przykład z mysql/examples też nie na wiele mi się zda, bo nie ma w nim nigdzie zastosowanej funkcji mysql_init, a o to rozwala się mój kilkulinijkowy program (i nerwy).

 

W akcie desperacji wpisałem po prostu w googlach treść komunikatu o błędzie i... było to złe posunięcie, bo moja frustracja jeszcze bardziej się pogłębiła. Najpierw wpadłem ja jakieś forum, gdzie koleś miał ten sam problem. Nikt mu nie pomógł, ale napisałem do niego z pytaniem, czy sobie poradził. Odpisał, że nie. Potem znalazłem jakieś chińskie forum, gdzie rozumiałem tylko angielskie komunikaty kompilatora. Na koniec trafiłem na stronę jakichś "ekspertów" gdzie pod treścią problemu identycznego z moim był wielki link "Sign up to see the solution". Kliknąłem i pojawił się "Error" (bez żadnych wyjaśnień). Wietrzę tu jakiś spisek. :) Czy nikomu do cholery nie udało się rozwiązać czegoś takiego???

 

Nie wiem, może ja jestem jakiś niekumaty i zbyt ambitny. Może masz FiDO trochę czasu i chciałbyś nowe wyzwanie. Jeśli możesz, to spróbuj sam się z tym zmierzyć. Zainstaluj sobie MySQL i DevCpp, zobacz jak to jest z tym dołączaniem bibliotek, bo mnie nic nie idzie. Ja dla własnego zdrowia psychicznego odkładam ten problem na parę dni.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Może masz FiDO trochę czasu i chciałbyś nowe wyzwanie. Jeśli możesz, to spróbuj sam się z tym zmierzyć. Zainstaluj sobie MySQL i DevCpp, zobacz jak to jest z tym dołączaniem bibliotek, bo mnie nic nie idzie.

Hehe... (sory ;]) czasu mam tak o 24h na dobe za malo zeby zrealizowac plany wakacyjne, ale wyzwania lubie ;] Zobacze co tam w trawie piszczy, MySQL'a mam 4.0.20 i od niego tez biblioteki, DevCpp ni mam, ale samego gcc, z ktorego on korzysta mam, wiec bede kompilowal "z palca". W necie jestem tylko wieczorami, wiec spodziewaj sie odpowiedzi jutro/pojutrze/za N dni ;] w takiej porze

 

 

 

N -> oo ;]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ok.. problem okazal sie banalny.

Rozchodzi sie oczywiscie o MS... biblioteka dostarczona z MySQL'em jest kompilowana pod MSVC i to on generuje lib'a ktorego sie dolacza potem do swoich zewnetrznych klientow, ale oczywiscie format ten jest MS only, wiec na innych kompilatorach trzeba sobie radzic inaczej. Po pierwsze trzeba sobie z dll'ki wygenerowac "swojego" lib'a ktory bedzie kompatybilny z gcc.

Najprosciej zrobic to w nastepujacy sposob:

1. Najpierw trzeba wyekstrachowac plik DEF z definicjami exportowanych funkcji (parametrem jest lib w formacie MS, ten dolaczony do MySQL'a):

reimp -d libmysql.lib
reimp'a powinienes miec w DEV-C++ w katalogu bin, w koncu to jest oparte na MinGW, w ktorym to mam taki pliczek w bin. W razie czego poszukaj w necie, najlepiej na www.mingw.org, jest ponoc w pakiecie mingw-utils

 

2. majac juz DEF'a robimy lib'a za pomoca dlltool'a ktory juz napewno musi byc w DEV-C++ (odpalasz to w katalogu z plikiem libmysql.dll i wygenerowanym powyzej DEF'em)

dlltool --input-def libmysql.def --dllname libmySQL.dll --output-lib libmySQL.a -k

Ok.. majac gotowego lib'a wrzuc go sobie np do %DEVCPP%/lib, bo ta sciezke kompilator przeszukuje pewnie domyslnie, wiec nie bedziesz musial podawac zadnych sciezek.

 

W opcjach projektu w DEV-C++ gdzies musi byc pole do wpisywania bibliotek do linkowania, musisz tam dopisac 'mysql' (bez prefixu 'lib', on jest domyslny), niestety nie pokieruje Cie gdzie tego szukac, bo nie mam obecnie go na dysku.

W kazdym razie "z palca" kompiluje sie to tak:

gcc mytest.c -I../../include/ -L. -lmysql -o mytest.exe

-I to sciezka do mysql.h, ale to juz pewnie ustawiles sobie w DEV'ie skoro nie rzucalo Ci bledami kompilacji tylko linkowania

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

problem okazal sie banalny.

No faktycznie banał! :D Że też sam na to nie wpadłem! :)

 

Rozchodzi sie oczywiscie o...

Jak mawiała pewna polonistka - "rozchodzą się nogi, drogi i małżeństwa". :)

 

No ok, już się nie czepiam. Szło jak z płatka, ale przy generowaniu lib'a za pomocą dlltool, wyskakuje mi komunikat: "dlltool: installation problem, cannot exec `as' "... Cóż to za 'as' znowu?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

problem okazal sie banalny.

No faktycznie banał! :D Że też sam na to nie wpadłem! :)
Tak sie z tym meczyles, ze spodziewalem sie czegos trudniejszego :)

Rozchodzi sie oczywiscie o...

Jak mawiała pewna polonistka - "rozchodzą się nogi, drogi i małżeństwa". :)
Ludzie tez sie moga rozejsc, np. po skonczonych zajeciach :>

No ok, już się nie czepiam.

Trzymam za slowo ;]

Szło jak z płatka, ale przy generowaniu lib'a za pomocą dlltool, wyskakuje mi komunikat: "dlltool: installation problem, cannot exec `as' "... Cóż to za 'as' znowu?

Jak wynika z tresci bledu brakuje Ci as.exe (dziwne bo to assembler, ktory chyba jest wymagany...). DEV-C++ korzysta co prawda z MinGW, ale z wersji troch wykastrowanej, wiec mozesz tego nie miec, ja mam "pelna" wersje, wiec poszlo bez problemu.

Powinno to byc w tym archiwum: http://www-inst.eecs.berkeley.edu/~instcd/...nGW-3.1.0-1.exe

W razie czego bede mial to wieczorem.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

FiDO! Jesteś wielki! Nie wiem skąd masz tę wiedzę, ale imponuje mi. Bardzo Ci dziękuję. Dodam jeszcze tylko, że w parametrach kompilacji należy jednak wpisać 'libmySQL.a'; samo mysql nie wystarczy. Nie dołuj mnie, tylko, że był to banalny problem, bo do reszty osiwieję myśląc jaki Twoim zdaniem jest problem klasyfikowany jako 'trudny'. :D Jeszcze raz wielkie dzięki!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

FiDO! Jesteś wielki! Nie wiem skąd masz tę wiedzę, ale imponuje mi. Bardzo Ci dziękuję.

Jaki tam znowu wielki.. 182cm tylko :)

A wiedze mam z netu, daja za darmo to trzeba brac :> Nie mysl sobie, ze to rozwiazalem tak o w 5 minut z glowy ;] Ale po pierwszej nieudanej probie juz wiedzialem co jest nie tak, odpowiednie haslo w google i 2-3 minuty pozniej mialem juz gotowe rozwiazanie, ktore wlasnie Tobie zaprezentowalem, wiec widzisz jak liczy sie tutaj umiejetnosc obslugi googli.

Dodam jeszcze tylko, że w parametrach kompilacji należy jednak wpisać 'libmySQL.a'; samo mysql nie wystarczy.

Byc moze, u mnie w kazdym razie starczylo samo mysql i jest to typowe zachowanie gcc, ktory nie wymaga wpisania nazwy calej biblioteki, a prefix 'lib' i rozszerzenie juz sam sobie doda.

Nie dołuj mnie, tylko, że był to banalny problem, bo do reszty osiwieję myśląc jaki Twoim zdaniem jest problem klasyfikowany jako 'trudny'. :D

Skoro udalo mi sie to zrobic w parenascie/paredziesiat minut, no to problem klasyfikuje jako latwy. A trudne to sa takie, nad ktorymi slecze pare dni z pomoca googli i nadal nie wychodzi, na szczescie takie sie nie zdarzaja :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Witam, mam podobny problem tyle że:

 

1. Najpierw trzeba wyekstrachowac plik DEF z definicjami exportowanych funkcji (parametrem jest lib w formacie MS, ten dolaczony do MySQL'a):

reimp -d libmysql.lib
reimp'a powinienes miec w DEV-C++ w katalogu bin, w koncu to jest oparte na MinGW, w ktorym to mam taki pliczek w bin. W razie czego poszukaj w necie, najlepiej na www.mingw.org, jest ponoc w pakiecie mingw-utils

Nie miałem reimp'a ale go ściągnąłem, tyle że nie mam nigdzie libmysql.lib :(

Skąd go moge ściągnąć?

 

Pozdrawiam

Przemo

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A jak wam powiem łatwiejszy sposób wedłóg mnie.

W Dev-cpp wchodzicie chyba w pomoc czy gdzieś tak żeby wyświetliło isę okienko "O programie" tam nadole jest link żeby ściągnąć uaktualnienia. W nowym okienku kilkami na odpowedni przycisk.Mamy listę dodatkó.Wybieramy libmysql i ... ściągamy. Następnie dev bedzie chciał to zainstalować. Po tym wszystkim można zajrzeć do katalogu example i tam chyba jest przykładowy kod z użyciem tej biblioteki. Aby w swoich programach móc jej używać trzeba:

1)Utworzyć nowy porojekt;)

2)zainkludować :

#include<Windows.h>

#include<mysql/mysql.h>

3) Wejść w Projekt->Opcje projektu Zakładka parametry i w ostaniej dopisujemy : -lmysql

4) Piszemy poprawny kod i kompilujemy:)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...