Snažím se propojit program v c++ s MySql, ale bohužel jsem ztroskotal hned na začatku
u #include <mysql.h>
Visual Studio hlásí, že taková knihovna neexituje. Poradí někdo?
musíš si stáhnout dev verzi mysql, která obsahuje jak include tak libs, pokud to nenajdeš, tak to musíš skompilovat (tak jsem to dělal v Qt)
#2 ingiraxo
A co když pak budu chtít spustit tento program na jiném počítači, Mám na mysli pouze exe soubor, který dám kamarádovi. Bude fungovat ta část kódu která vyžaduje<mysql.h> ? nebo si bude muset stahnout dev verzi mysql taky?
#3 ondra
K svojmu exe súboru pribalíš libmysql.dll, ktorú nájdeš v adresári lib. Vo Visual Studiu si nastavíš cesty približne takto (umiestnenie C:\Program Files\MySQL\MySQL Server 5.6 sa môže v tvojom prípade líšiť):
Pre include súbory:
C:\Program Files\MySQL\MySQL Server 5.6\include
Pre lib súbory:
C:\Program Files\MySQL\MySQL Server 5.6\lib
Potom vo vlastnostiach projektu (Properties > Linker > Input > Additional Dependencies) pridáš libmysql.lib. A z adresára lib ešte potrebuješ libmysql.dll, ktorú skopíruješ ku svojmu exe súboru.
Přesto ještě potřebuju jednu radu. Kompilace proběhne úspěšně, ale pokud program chcci sputtit vyhodí to tuto chybu:
The program '[1480] MYSQL.exe: Native' has exited with code -1073741701 (0xc000007b).
když dám do mainu jenom toto MYSQL mySQL; tak se to ještě sputtí ,ale pokud tam dám třeba if (mysql_init(&mySQL)) tak už to vyhodí tu chybu.
Nevíte čím by to mohlo být
#include "stdafx.h"
#include <iostream>
#include <mysql.h>
#include <my_global.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout << "ahoj" <<endl;
MYSQL *connect;
connect = mysql_init(NULL);
system("pause");
return 0;
}
pardon, vložil jsem špatný kód.
#include "stdafx.h"
#include <my_global.h>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <mysql.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout << "ahoj" <<endl;
MYSQL *connect;
connect = mysql_init(NULL);
system("pause");
return 0;
}
pokročil jsem kousek dál a vyhazuje to zase jinou chybu:
>c:\users\ondra\documents\visual studio 2010\Projects\DatabazeCode\Debug\DatabazeCode.exe : fatal error LNK1120: 1 unresolved externals
přepnul jsem Output na Debug a objevill jsem toto:
'DatabazeCode.exe': Loaded 'C:\Users\Ondra\Documents\Visual Studio 2010\Projects\DatabazeCode\Debug\DatabazeCode.exe', Symbols loaded.
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\msvcp100d.dll', Symbols loaded.
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Symbols loaded.
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\apphelp.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\AppPatch\AcLayers.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\sspicli.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\msvcrt.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\rpcrt4.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\cryptbase.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\sechost.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\user32.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\gdi32.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\lpk.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\usp10.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\advapi32.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\shell32.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\shlwapi.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\ole32.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\oleaut32.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\userenv.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\profapi.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\winspool.drv', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\mpr.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\imm32.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'C:\Windows\SysWOW64\msctf.dll', Cannot find or open the PDB file
'DatabazeCode.exe': Loaded 'ImageAtBase0x4ab70000', Loading disabled by Include/Exclude setting.
'DatabazeCode.exe': Unloaded 'ImageAtBase0x4ab70000'
The program '[5420] DatabazeCode.exe: Native' has exited with code 0 (0x0).
dll soubory na daném místě existují
#13 ondra
Tak sa zdá, že si si nainštaloval 64 bitovú verziu MySQL. To je OK ak máš 64 bitový Windows, problém je, že include a lib súbory sú taktiež pre 64 bitové aplikácie, takže si musíš stiahnuť 32 bitové.
Choď na http://dev.mysql.com/downloads/mysql/ a stiahni si Windows (x86, 32-bit), ZIP Archive. Potom si zisti, kde sa ti nainštaloval MySQL server, napr.:
C:\Program Files\MySQL\MySQL Server 5.6\
Vytvor tam podadresár "x86" a skopíruj doň z toho ZIP súboru dva priečinky, include a lib, takže to bude vzerať takto:
C:\Program Files\MySQL\MySQL Server 5.6\
+ x86
+ include
+ lib
Potom si vo Visual Studiu uprav cesty include a lib na tie nové priečinky (...\x86\include a ...\x86\lib) a skús skompilovať tento program:
#include <cstdio>
#include <WinSock2.h>
#include <Windows.h>
#include <mysql.h>
#pragma comment(lib, "libmysql.lib")
int main()
{
MYSQL mysql;
if (mysql_init(&mysql))
{
if (mysql_real_connect(
&mysql, "localhost", "root", "root", 0, 3306, 0, 0))
printf_s("Spojene!\n");
else
printf_s("Nespojene!\n");
mysql_close(&mysql);
}
else
printf_s("Chyba!\n");
system("PAUSE");
return 0;
}
Pokiaľ si si nastavil iné heslo pre roota tak ho zmeň vo funkcii mysql_real_connect (4. parameter). K zostavenému exe skopíruj libmysql.dll z ...\x86\lib\ a spusti. Ak sa program nespustí, resp. nebudeš vidieť žiadny výstup tak skontroluje, či si skopíroval správnu libmysql.dll a či sa nachádza pri exe súbore. Ak to spustíš tak na 99,99% uvidíš hlášku buď Spojene alebo Nespojene. Ak to bude ten druhý prípad tak skontroluj, či ti beží MySQL služba a ak áno tak skontroluj, či je správne prihlasovacie meno a heslo, taktiež či je správny port (3306 je štandard ak si ho manuálne nezmenil).
jsi pro mě bůh :D děkuju děkuju, děkuju. Nechápu jak je to možné, protože jsem tuto verzi už stahlou a nešlo to, ale zase je pravda že jsem neměl tyto include
#include <WinSock2.h>
#include <Windows.h>
ale teď to opravdu funguje :D nastotisickrát dík :-)
#15 ondra
Som rád že ti to ide. Tie WinSock2.h a Windows.h sú tam len preto, lebo libmysql sa pripája na server pomocou socketu a ten je vo Windowse definovaný ako SOCKET, bez WinSock2.h by ti to hlásilo chybu pri kompilácii.
V tvojom prípade robilo problém to, že Oracle trochu nešťastne rieši distribúciu MySQL, pretože ak nainštaluješ 64 bitovú verziu tak ti chýbajú 32 bitové lib súbory. Čiže k 32 bitovému programu si pripájal 64 bitové libmysql.lib, preto to hlásenie "LNK2019: unresolved external symbol _mysql_init@4 ..."
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku