Program MySQL a libmysql.dll (#using <libmysql.dll>)

0

Witam, napisałem prosty program pobierający dane z MySQL, wszystko działa.
niestety program działa tylko w obecności pliku libmysql.dll

Próbowałem go dołączyć do projektu na rożne sposoby ale nic nie przynosiło zamierzonego efektu.

Gdy dołączam plik w ten sposób:

#using <libmysql.dll>

to wyskakuje mi taki błąd:

1>fatal error C1113: #using failed on 'c:\users\piotrek\documents\visual studio 2010\projects\program - logowanie\library\libmysql.dll'

Oczywiście plik ten znajduje się w podanym katalogu.

Chodzi mi oto aby zaimportować ten plik 'libmysql.dll' do programu aby program działał bez obecności tego pliku na innym komputerze.
Korzystam z Visual C++ 2010
proszę o pomoc :)

0

Poczytaj o linkowaniu statycznym. I sprawdź czy licencja biblioteki na to zezwala :)

0

Musi być jakiś łatwiejszy sposób...
Aby dołączyć .dll do projektu w Visual C++ 2010
Może coś z LoadLibrary("libmysql.dll"); ?

0

Ale przecież cała idea bibliotek dynamicznie ładowanych jest taka że są one dynamicznie ładowane i dostarczane osobno...

0

Tak, wiem ale jest chyba jakiś sposób aby plik 'libmysql.dll' nie był wymagany przy odpaleniu programu ;)

0

Potrzebujesz biblioteki linkowanej statycznie, a to jest dynamiczna.

0

A jak zalinkować tą dll statycznie ??
Da się ja jakoś przerobić ?
jeżeli nie to skąd mam zdobyć statyczną.

0

dll - Dynamic Loaded Library. Ty potrzebujesz *.lib

0

Plik libmysql.lib tez mam, ale waży o wiele mniej, jak go uzyć aby nie był wymagany plik libmysql.dll?

Proszę o dokładną odpowiedz co trzeba zrobić.
;)

0

Dodać liba do projektu i include mysql.h? Przynajmniej na builderze tak mi działa.

0

W Visual C++ dodałem do projektu ale to nic nie zmieniło... Czy może mi ktoś pomóc, ktoś kto korzysta z Visual C++ i wie gdzie jest opcja dołączania .DLL do projektu w taki sposób aby plik nie był już wymagany w katalogu z programem..

0

czy to jest naprawdę tak duży problem zapytać o to samo google? przejrzyj to Padły w tym temacie keywordy, które już dawno powinny nakierować cie na rozwiązanie.

0

Zrobiłem wszystko według tej stroni: http://www.geekadmin.com/?p=34
ale wyskakuje mi taki bład:

 Error	1	error D8016: '/clr:pure' and '/MTd' command-line options are incompatible
0
piotrek11737 napisał(a)

Plik libmysql.lib tez mam, ale waży o wiele mniej, jak go uzyć aby nie był wymagany plik libmysql.dll?

Proszę o dokładną odpowiedz co trzeba zrobić.
;)

bo to NIE JEST TEN .lib o ktory chodzi!!!

na biblioteke DYNAMICZNĄ w C/C++ skladają się trzy pliki:

  • .dll ("duży") z faktyczną biblioteką,
  • .lib ("mały") z zaślepkami funkcji, aby kompilacja/linkowanie przeszło mimo braku faktycznego kodu (nie każ mi tłumaczyć..)
  • .h lub .hpp (średni), dla kompilatora, zawierający deklaracje funkcji (aby kompilator "znał" ich nazwy i parametry)

na STATYCZNĄ wersję biblioteki składają się dwa pliki:

  • .h lub .hpp (średni), prawie taki sam jak wyżej
  • .lib (duży) z pełnym kodem funkcji (a nie z zaślepkami)

jest jeszcze trzeci rodzaj, biblioteki "kodowe", wtedy dostajesz

  • .h/.hpp
  • .c/.cpp
    ale one są chybe jasne..

pliki .dll (o ile potrzebne) powinny leżeć obok pliku .exe (chyba ze chesz wdawać sie w bardziej zaawansowane szczegoly jak opcje wyszukiwania brakujacych modulow w runtimie..)

pliki .LIB (i duze i male) dodajesz we wlasciwosciach projektu, w gałęzi "linker"/"input", jako "additional dependencies". pamietaj o ścieżce, jeżeli plik nie leży razem z kodem.
pliki .LIB (jezeli kompilator to obsluguje - a VS tak) mozesz tez dołączać "w kodzie", na poczatku ktoregos pliku .cpp mozesz dopisac #pragma comment( lib, "blahblah.lib" ) co kompilator potraktuje na rowni z ustawieniami projektu

a pliki .h/.hpp/.c/.cpp sam juz pewnie wiesz

0

Ale nadal nikt mi nie napisał co mam zrobić (w praktyce) aby plik.DLL nie był potrzebny w tym samym katalogu z .exe
wywala mi taki błąd:
(Plik .dll, lib jest w projekcie w AdditionalDependencies a dalej nic)
user image

tak też próbowałem:

#pragma comment( dll, "libmysql.dll" )  

A teraz konkretnie i na temat:
Co mam zrobić (chodzi mi o edycje ostawień projektu), aby ten błąd juz nie wyskakiwał (gdy odpale tą aplikacje) ?

0
piotrek11737 napisał(a)

Ale nadal nikt mi nie napisał co mam zrobić (w praktyce) aby plik.DLL nie był potrzebny w tym samym katalogu z .exe
wywala mi taki błąd:
(Plik .dll, lib jest w projekcie w AdditionalDependencies a dalej nic)

<link>http://img15.imageshack.us/img15/3973/40436113.png</link>

tak też próbowałem:

#pragma comment( dll, "libmysql.dll" )  

A teraz konkretnie i na temat:
Co mam zrobić (chodzi mi o edycje ostawień projektu), aby ten błąd juz nie wyskakiwał (gdy odpale tą aplikacje) ?

Człowieku kochany!!!
Wszyscy Ci to już napisali, przeczytaj w koncu te odpowiedzi powoli i dokladnie, a nie tylko wycinaj postow kawalki kodu i odprawiaj czarne msze polaczone z programowaniem ewolucyjno-genetycznym..

po pierwsze, #pragma tyczyła się plików LIB a nie DLL, jakim cholernym jasnym prawem próbujesz użyć jej z DLL? zobacz, to sa litery "LIB" a to sa litery "DLL". One naprawde sie różnią.

po drugie, proszę, przeczytaj raz jeszcze to co Ci napisalem w poprzednim poście.
Zrozum, że są dwa rodzaje plików LIB ze takie większe i takie mniejsze.
Ty masz mieć ten "większy".
On jest do ściagniecia na stronce producenta, i pewnie będzie zzipowany, i pewnie w tym zipie NIE BĘDZIE obok niego DLLki.
Co więcej, ta paczuszka ZIP będzie na stornie nazwana "static library", a nie "dynamic library".

I masz uważać, aby tego LIB'a/ZIP'a nie pomylić z tym "mniejszym" który przychodzi w paczkach zawsze razem z DLLką.

To co Ci program wyrzucil, ze "brakuje DLL" świadczy o tym, że program zlinkował się z "małym" LIB'em.
Jeśli ściagnales paczke z "duzym" libem, i probujesz go uzyc i nadal masz taki efekt, to znaczy ze masz burdel w plikach na dysku i/lub w ustawieniach projektu, i że kompilator/linker wziely nie ten plik co trzeba, poniewaz pewnie źle poustawiałes ścieżki do plików. W takim przypadku wypiernicz wszystkie "małe" liby które porozrzucales, wszystkie "dll"ki ktore pokopiowales gdziestam, i zostaw tylko jeden duzy plik lib, w jednym miejscu, a potem wklej do opcji projektu sciezke do tego pliku. "i koniec". wiecej magii nie ma. tylko tyle wystarczy*)

  • zakladajac ze nie pomylisz kompilatorow, architektur, systemow operacyjnych itede itepe, ale wtedy komunikaty bylyby inne..
0

No wreszcie jakaś konkretna odpowiedź, czaje wszystko.
Mam jeszcze jedno pytanko, plik libmysql.dll pobrałem wraz z Connectorem MySQL, nie wiem skąd mam sciagnać tego "dużego lib'a (Statycznego)" bo nie znam autora tego pliku.
Jeżeli ktoś wie skąd mogę dostać libmysql.lib (Ten statyczny) to niech napisze.
Z góry dzięki.

0

Po długotrwałym szukaniu znalazłem plik.
http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-apps-windows-visual-studio.html
Nazywa się: mysqlcppconn-static.lib
teraz taki problem wywaliłem plik .dll i ten stary lib dołączyłem plik mysqlcppconn-static.lib do projektu i wystakuja takie błedy:

1>------ Build started: Project: Program - Logowanie, Configuration: Debug Win32 ------
1>MSVCURT.lib(mexcptptr.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x02000085).
1>MSVCURT.lib(ios.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x02000059).
1>MSVCURT.lib(ios.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_val<char,std::allocator<char> >): (0x0200007c).
1>MSVCURT.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x02000082).
1>MSVCURT.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_val<char,std::allocator<char> >): (0x020000c9).
1>MSVCURT.lib(locale_implib_pure.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x02000075).
1>MSVCURT.lib(locale_implib_pure.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_val<char,std::allocator<char> >): (0x020000b7).
1>MSVCURT.lib(xthrow.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x02000039).
1>MSVCURT.lib(wlocale.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x020000b6).
1>MSVCURT.lib(wlocale.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_val<char,std::allocator<char> >): (0x02000117).
1>MSVCURT.lib(xlocale.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x0200009a).
1>MSVCURT.lib(xlocale.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_val<char,std::allocator<char> >): (0x020000eb).
1>MSVCURT.lib(xdateord.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x020000b1).
1>MSVCURT.lib(xdateord.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_val<char,std::allocator<char> >): (0x020000f7).
1>LINK : fatal error LNK1215: metadata operation failed (80004005) : Nieokreślony błąd.
1>  
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
 

Wie ktoś w czym problem?

0

podejrzewam, ze teraz zrobiles wszystko wg. opisu na http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-apps-windows-visual-studio.html#connector-cpp-application-build-static ?

dziwne.. to by wskazywalo, ze biblioteki byly skompilowane albo roznymi kompilatorami (->zwykle ciezki problem) albo, ze opcje kompilatora byly inaczej ustawione.. troche bez sensu jest prosic zebys spisywal wszystko co masz w properties projektu.. zostaje prosic abys spakowal projekt, razem z tą biblioteka, dokladnie w takim stanie jakim teraz masz - i zebys go gdzies wrzucil do sciagniecia

0

Przeczytaj te zdania
"The MySQL Connector/C++ static library file is mysqlcppconn-static.lib. This needs to be statically linked with your application. You also need to link against the files libmysql.dll and libmysql.lib. Once linking has been successfully completed, the application will require access to libmysql.dll at run time. "

Szczególnie ostatnie :/
Tak czy siak plik libmysql.dll bedzie wymagany.

0

Napisalem Ci przed chwila obszerny, bedzie gdzies ze poltora ekranu post, z wyjasnieniem co i jak masz zrobic, co jak rozumiec i czemu..
..a potem poprawiajac w poscie literowke, palec mi sie zesliznal na klawisz "STRONA WSTECZ" ktory jakis chory umyslowo analityk pracujący w IBM/LENOVO/THINKPAD/cholerawiegdzie i mający kość zamiast mózgu wymyslil ze powinien lezec na klawiaturze tuz kolo CHOLERNEJ STRZALKI KIERUNKOWEJ W LEWO. Niech go kiedys los pokara za to. Teraz jestem wkur*** jak.. a zreszta..

Nie wiem co masz w projekcie, i szczerze mowiac nie mam humoru pytac.. Robilem nowy projekt w VS/C++ bez CLI. Napisalem jakies trzy linijki na krzyz nibyuzywajace connectora. Sciagnalem aktualny connector-c++, dolaczylem do opcji plik connector-c++\lib\mysqlcppconn-static.lib. Build. Dupa. Fail brzmi:
error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall sql::mysql::MySQL_Driver::~MySQL_Driver(void)" (__imp_??1MySQL_Driver@mysql@sql@@UAE@XZ) referenced in function _wmain
Nie chce mi sie znowu tego opisywac czemu tak, ale nalezy wtedy do opcji projektu/c++/preprocessor/defines dopisac CPPCONN_LIB_BUILD (np: WIN32;_DEBUG;_CONSOLE;CPPCONN_LIB_BUILD)

Build. Dupa. Fail brzmi:

mysqlcppconn-static.lib(mysql_client_api.obj) : error LNK2019: unresolved external symbol _mysql_affected_rows@4 referenced in function "public: virtual unsigned __int64 __thiscall sql::mysql::NativeAPI::LibmysqlStaticProxy::affected_rows(struct st_mysql *)" (?affected_rows@LibmysqlStaticProxy@NativeAPI@mysql@sql@@UAE_KPAUst_mysql@@@Z)</CODE>
i temu podobne razy 57.

Ok, czyli brakuje libmysql.
Nie chcesz DLL? oki.
Google, "libmysql static", pierwszy wynik: http://dev.mysql.com/doc/refman/5.0/en/building-clients.html
Piszą tam, że "libmysql" jest dynamiczna, zaś w wersji statycznej nazywa sie "libmysqlclient". Ostatecznie, logiczne. Nie chcesz sie przeciez wiazac z silnikiem serwera mysql, tylko z jego programem klienckim, mysql-client.. ale pewnie w to nie wnikales..

connector-C++ nie zawiera tego pliku dziwnym trafem. powinien! Fail z ich strony, IMHO.
ale kit z tym, connector-C go zawiera. tak, tez musisz go sciagnac.

po dopisanu connector-c\lib\mysqlclient.lib do opcji linkera projekt sie skompilowal, ruszyl, i zakonczyl, i ani razu nie chcial żadnego pliki DLL
0

Po dołączeniu pliku mysqlclient.lib wyskakuje błąd:

1>mysqlclient.lib(client.obj) : fatal error LNK1313: ijw/native module detected; cannot link with pure modules

;)

0

Po zmianie:
properties, Configuration properties, General, Common Language Runtime support = "Common Language Runtime support /clr".
wyskakuja takie bledy:

1>libcmt.lib(invarg.obj) : error LNK2005: __set_invalid_parameter_handler already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(crt0dat.obj) : error LNK2005: _exit already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(crt0dat.obj) : error LNK2005: __cexit already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(dosmap.obj) : error LNK2005: __errno already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(_file.obj) : error LNK2005: ___iob_func already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(winsig.obj) : error LNK2005: _signal already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in MSVCRT.lib(cinitexe.obj)
1>libcmt.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRT.lib(cinitexe.obj)
1>libcmt.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRT.lib(cinitexe.obj)
1>libcmt.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRT.lib(cinitexe.obj)
1>libcmt.lib(fflush.obj) : error LNK2005: _fflush already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(atox.obj) : error LNK2005: _atoi already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(strtol.obj) : error LNK2005: _strtol already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(strtol.obj) : error LNK2005: _strtoul already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(osfinfo.obj) : error LNK2005: __get_osfhandle already defined in MSVCRT.lib(MSVCR100.dll)
1>libcmt.lib(osfinfo.obj) : error LNK2005: __open_osfhandle already defined in MSVCRT.lib(MSVCR100.dll)
1>mysqlclient.lib(my_init.obj) : error LNK2019: unresolved external symbol __imp__RegCloseKey@4 referenced in function _my_win_init
1>mysqlclient.lib(my_init.obj) : error LNK2019: unresolved external symbol __imp__RegEnumValueA@32 referenced in function _my_win_init
1>mysqlclient.lib(my_init.obj) : error LNK2019: unresolved external symbol __imp__RegOpenKeyExA@20 referenced in function _my_win_init
1>mysqlclient.lib(random.obj) : error LNK2019: unresolved external symbol __imp__CryptAcquireContextA@20 referenced in function "public: __thiscall TaoCrypt::OS_Seed::OS_Seed(void)" (??0OS_Seed@TaoCrypt@@QAE@XZ)
1>mysqlclient.lib(random.obj) : error LNK2019: unresolved external symbol __imp__CryptReleaseContext@8 referenced in function "public: __thiscall TaoCrypt::OS_Seed::~OS_Seed(void)" (??1OS_Seed@TaoCrypt@@QAE@XZ)
1>mysqlclient.lib(random.obj) : error LNK2019: unresolved external symbol __imp__CryptGenRandom@12 referenced in function "public: void __thiscall TaoCrypt::OS_Seed::GenerateSeed(unsigned char *,unsigned int)" (?GenerateSeed@OS_Seed@TaoCrypt@@QAEXPAEI@Z)
1>C:\Users\Piotrek\Documents\Visual Studio 2010\Projects\Program - Logowanie\Debug\Program - Logowanie.exe : fatal error LNK1120: 6 unresolved externals 
0

heh.. tak przeczuwałem ze to włączone CLI będzie Ci bruździć..

co do nowego spamu błędów o "already exists", sprawdz czy Twoj kompilator jest taki sam jak ten ktorym oni kompilowali i czy flagi runtime'u (/MT, /MTd itp) sa takie same jak kazali na tamtych stronach. Sądząc z napisów MSVCRT.lib(MSVCR100.dll) masz kolizje z VS2010, ale wiem czy Ty go masz, czy oni nim kompilowali. Na stronkach dev-mysql-download sa wersje bibliotek kompilowane visualem 2005, jesli masz 2005 albo 2008 to sprobuj z nimi. Jesli to Ty masz 2010, a z sieci sciagnales 2005, sciagnij to drugie. Jesli zas uzywasz 2010 i masz te drugie (nie-2005) i dalej taki blad jest to hm.. trzeba bedzie pomyslec dalej.

co do unresolved external symbol __imp__RegCloseKey to z lekka dziwne.. wyrzuciles z opcji linkera "standard libraries" albo zablokowales Advapi32.lib ? ale to bedzie do rozwiazania po tym pierwszym, bo przy odrobinie pecha moga to byc po nim popluczyny a nie faktyczny blad

0

Masz Visual C++ 2010? jeżeli tak spakuje zaraz projekt wyśle go do Ciebie i sprawdzisz sam.

Projekt spakowany, http://www.sendspace.pl/file/6d3657da50e4fb6206599ce
Spróbuj wyeliminować błędy u siebie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1