Visual C++ mysql kapcsolódási hiba

Visual C++ mysql kapcsolódási hiba
2012-02-06T01:44:13+01:00
2012-02-08T12:06:32+01:00
2022-11-24T15:15:40+01:00
Enderpt
Az a gondom, hogy nem tudok kapcsolódni a mysql adatbázishoz Visual c++-al, pontosabban már a kód fordítása hibaüzenettel leáll. A neten már 2 napja keresgélek megoldás után, de semmi nem segített, mi lehet a baj?

Ez a program:

#include "stdafx.h" #include <stdlib.h> #include <iostream> #include <stdio.h> #include <stdarg.h> #include <windows.h> #include <mysql.h> #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> #include <cppconn/prepared_statement.h> #define SERVER "localhost" #define USER "root" #define PASSWORD "root1234" #define DATABASE "test" #define WIN32_LEAN_AND_MEAN #define MT4_EXPFUNC __declspec(dllexport) MT4_EXPFUNC int __stdcall kapcsolat() { // create a pointer of the type mysql MYSQL *conn; // initialize your mysql connection conn = mysql_init(NULL); // connect to your database if (conn == NULL) return -99; if ( mysql_real_connect(conn,SERVER,USER,PASSWORD,DATABASE,0,NULL,0) == NULL ) return -100; // mysql_errno(conn); else return 100; mysql_query(conn,"insert into users (id, name) values( 11, 'sirKahn');"); // close the connection mysql_close(conn); return 1; }

A hibaüzenet pedig ez:

1>Tibitest.obj : error LNK2001: unresolved external symbol _mysql_close@4
1>Tibitest.obj : error LNK2001: unresolved external symbol _mysql_query@8
1>Tibitest.obj : error LNK2001: unresolved external symbol _mysql_real_connect@32
1>Tibitest.obj : error LNK2001: unresolved external symbol _mysql_init@4
Mutasd a teljes hozzászólást!
Gondolom a Configure Properties -nél x64 van beállítva, mert minden x64-es.
Vagy keres rá hogy kell VS2010-ben x64-re fordítani.

Ezt találtam:
It comes with Visual Studio Installation files, you can select the "Itanium Compilers and Tools" and "x64 Compilers and Tools" check boxes during a Custom installation, or perform a full installation of Visual Studio.
Mutasd a teljes hozzászólást!

  • MySQL library-t nem adtad hozzá a projekthez vagy a library elérése roszz?
    Visual Studio (Solution->Properities->Configuration Properties-> Linker
    Mutasd a teljes hozzászólást!
  • A linkerben az additional dependencies-nél ez van: libmysql.lib
    Erre gondoltál?
    Mutasd a teljes hozzászólást!
  • Igen.
    Az elérési út jó a
    Property->Linker->Additional Library Directories
    Mutasd a teljes hozzászólást!
  • Nem volt beállítva, így megadtam neki azt az utat, ahol a lib file van, mégis ugyan az a hiba.
    Mutasd a teljes hozzászólást!
  • Kicsit még keresgéljél, valószínűleg amellett valahol van egy olyan opció is, hogy 'add library to project', ott add meg a mysql.lib-et (vagy amid van).
    Mutasd a teljes hozzászólást!
  • Pedig vagy a lib nincs meg, vagy az útvonal rossz.
    Látni kellene a projekt fájlt.
    Mutasd a teljes hozzászólást!
  • Ezt?

    Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tibitest", "Tibitest\Tibitest.vcxproj", "{5AC07B74-8EA2-42AF-B669-F2D71894EE7D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {5AC07B74-8EA2-42AF-B669-F2D71894EE7D}.Debug|Win32.ActiveCfg = Debug|Win32 {5AC07B74-8EA2-42AF-B669-F2D71894EE7D}.Debug|Win32.Build.0 = Debug|Win32 {5AC07B74-8EA2-42AF-B669-F2D71894EE7D}.Release|Win32.ActiveCfg = Release|Win32 {5AC07B74-8EA2-42AF-B669-F2D71894EE7D}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal
    Mutasd a teljes hozzászólást!
  • Nem.
    Tibitest.vcxproj
    Mutasd a teljes hozzászólást!
  • Tessék:


    <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{5AC07B74-8EA2-42AF-B669-F2D71894EE7D}</ProjectGuid> <RootNamespace>Tibitest</RootNamespace> <Keyword>MFCDLLProj</Keyword> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> <CharacterSet>Unicode</CharacterSet> <UseOfMfc>Static</UseOfMfc> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> <WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>Unicode</CharacterSet> <UseOfMfc>Static</UseOfMfc> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <LinkIncremental>true</LinkIncremental> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <LinkIncremental>false</LinkIncremental> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> <PrecompiledHeader>NotUsing</PrecompiledHeader> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PrecompiledHeaderFile> </PrecompiledHeaderFile> <PrecompiledHeaderOutputFile> </PrecompiledHeaderOutputFile> </ClCompile> <Link> <SubSystem>Windows</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <ModuleDefinitionFile>.\Tibitest.def</ModuleDefinitionFile> </Link> <Midl> <MkTypLibCompatible>false</MkTypLibCompatible> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </Midl> <ResourceCompile> <Culture>0x0409</Culture> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ResourceCompile> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <WarningLevel>Level3</WarningLevel> <PrecompiledHeader>NotUsing</PrecompiledHeader> <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions> </PreprocessorDefinitions> <AdditionalIncludeDirectories>C:\Program Files\MySQL\MySQL Server 5.5\lib;C:\Program Files\MySQL\MySQL Server 5.5\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PrecompiledHeaderFile> </PrecompiledHeaderFile> <PrecompiledHeaderOutputFile> </PrecompiledHeaderOutputFile> </ClCompile> <Link> <SubSystem>Windows</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <ModuleDefinitionFile>.\Tibitest.def</ModuleDefinitionFile> <AdditionalDependencies>libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>C:\Program Files\MySQL\MySQL Server 5.5\lib;C:\Program Files\MySQL\MySQL Server 5.5\include;C:\Program Files\MySQL\MySQL Server 5.5\include\mysql;C:\Program Files\MySQL\MySQL Server 5.5\lib\debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> </Link> <Midl> <MkTypLibCompatible>false</MkTypLibCompatible> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </Midl> <ResourceCompile> <Culture>0x0409</Culture> <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ResourceCompile> </ItemDefinitionGroup> <ItemGroup> <None Include="ReadMe.txt" /> <None Include="Tibitest.def" /> </ItemGroup> <ItemGroup> <ClCompile Include="Tibitest.cpp" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> </Project>
    Mutasd a teljes hozzászólást!

  • <AdditionalLibraryDirectories>C:\Program Files\MySQL\MySQL Server 5.5\lib;C:\Program Files\MySQL\MySQL Server 5.5\include;C:\Program Files\MySQL\MySQL Server 5.5\include\mysql;C:\Program Files\MySQL\MySQL Server 5.5\lib\debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>


    Vedd ki a
    "
    C:\Program Files\MySQL\MySQL Server 5.5\include;C:\Program Files\MySQL\MySQL Server 5.5\include\mysql;
    "

    Innen meg szed ki a library elérést:
    <AdditionalIncludeDirectories>C:\Program Files\MySQL\MySQL Server 5.5\lib;C:\Program Files\MySQL\MySQL Server 5.5\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>




    Biztos itt van a mysql lib?
    C:\Program Files\MySQL\MySQL Server 5.5\lib;
    vagy itt:
    C:\Program Files\MySQL\MySQL Server 5.5\lib\debug;
    ??

    Talán próbáld máshelyre rakni a lib-et pl. a projekted alá és beállítani oda a lib. könyvtárat.
    Mutasd a teljes hozzászólást!
  • És ha nem akarsz szóközöket a fájlnevek belsejében (nem mindenki akar), írd így:
    c:\progra~1\mysql\mysql~1.5\include
    c:\progra~1\mysql\mysql~1.5\lib
    Mutasd a teljes hozzászólást!
  • A libmysql.lib itt van, biztos, mert megnéztem:

    C:\Program Files\MySQL\MySQL Server 5.5\lib

    Megpróbálom kitörölgetni őket
    Mutasd a teljes hozzászólást!
  • Kipróbáltam, hogy kitöröltem őket, akkor a mysql.h-t hiányolta, amikor megadtam az elérési utat, akkor a libmysql.lib-et hiányolta, azt meg bemásoltam a project könyvtárába, akkor megint előjött az eredeti 4 hibaüzenet.
    Mutasd a teljes hozzászólást!
  • Ahhoz hogy teljesen biztos legyél, hogy az útvonal helyes a lib(ek) felé csináld így:

    #pragma comment ( lib, "C:/Program Files/MySQL/MySQL Server 5.5/lib/libmysql.lib" ) #include "stdafx.h" #include <stdlib.h> ...
    Ha a fordító azt mondja, hogy nincs (vagy nem létezik vagy nem tudja megnyitani vagy ilyesmi) a libmysql.lib, akkor nem jó az útvonal.
    Mutasd a teljes hozzászólást!
  • Már nem tudtam szerkeszteni az előbbi hsz-t.

    Töröld ki a WIN32_LEAN_AND_MEAN preprocesszort is, semmi szükség itt rá, sőt most kifejezetten nem kell! Az a windows.h-ra van hatással, de te azt az include után definiáltad, így teljesen értelmetlen.
    Ahogy előttem is mondták, ne keverd az additional include ill. library könyvtárakat! Két teljesen különböző dolog.
    Tehát ahogy a nevük is mondja, az include directories, csak headereket tartalmazó könyvtárakra utaljanak, a lib directories pedig csak lib-eket.
    Még valami, ez mit csinál?
    if ( mysql_real_connect(conn,SERVER,USER,PASSWORD,DATABASE,0,NULL,0) == NULL ) return -100; // mysql_errno(conn); else return 100;
    Mindenképp return?
    Mutasd a teljes hozzászólást!
  • Igen, az lenne az egész lényege, hogy az adatbázisból kiolvasott egyetlen bájttól függően igen, vagy nem választ adjon vissza az őt meghívó ex4 programnak.
    Mutasd a teljes hozzászólást!
  • De akkor minek van ott a mysql_query ill. a mysql_close?
    Na mindegy, megcsináltad amit mondtam?
    Mutasd a teljes hozzászólást!
  • Kitöröltem ezt: WIN32_LEAN_AND_MEAN
    és az #include <windows.h> -t is
    Valamint a c++--> general --> additional include dir-ből ezt:
    C:\Program Files\MySQL\MySQL Server 5.5\lib

    meg a linker --> additional library dir-ből ezt
    C:\Program Files\MySQL\MySQL Server 5.5\include

    Szóval most az includeban, csak a headerekre mutató link van, a lib-nél meg csak a library-kra mutató, de így is a kezdeti 4 hiba jön elő.

    Hja, és beletettem a legelejére ezt is: #pragma comment ( lib, "C:/Program Files/MySQL/MySQL Server 5.5/lib/libmysql.lib" )
    Mutasd a teljes hozzászólást!
  • Kitöröltem ezt: WIN32_LEAN_AND_MEAN
    és az #include <windows.h> -t is


    Ki mondta, hogy töröld a windows.h-t?

    Ember, te olvasol? Fennebb írtam, hogy másold be ezt az #include "stdafx.h" elé:
    #pragma comment ( lib, "C:/Program Files/MySQL/MySQL Server 5.5/lib/libmysql.lib" )
    Direkt kinéztem azt az útvonalat amit te használtál és azt írtam példaképpen. Csak copy-paste dolgod van.

    Mielőtt megint valami butaságot írnál, olvasd el ezt:
    @sanya hozzászólása Enderpt (01:44) részére előzmény | privát | 2012.02.06. 21:01 | válasz
    Ne siess a válasszal. Olvasd el, próbáld ki, nézz utána a neten és ha akkor sem megy, akkor írd le pontosan mi a baj, mit próbáltál ki, hogyan próbáltad stb, mert megváltozik véleményünk rólad.
    Ok?
    Mutasd a teljes hozzászólást!
  • Oda másoltam közvetlenül eléje, és vissza tettem a #include <windows.h> -t is, most így néz ki:

    #pragma comment ( lib, "C:/Program Files/MySQL/MySQL Server 5.5/lib/libmysql.lib" ) #include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <stdarg.h> #include <mysql.h> #include <windows.h> #define SERVER "localhost" #define USER "root" #define PASSWORD "root1234" #define DATABASE "test"

    de a hiba továbbra is fennáll.
    Mutasd a teljes hozzászólást!
  • Melyik hiba?

    A windows.h-t a mysql.h előtt includold!
    Mutasd a teljes hozzászólást!
  • Felcseréltem a mysql.h-t a windows.h-val, most ilyen:
    #pragma comment ( lib, "C:/Program Files/MySQL/MySQL Server 5.5/lib/libmysql.lib" ) #include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <stdarg.h> #include <windows.h> #include <mysql.h>

    Ez a hiba:

    1> Creating library C:\Users\Enderpt\documents\visual studio 2010\Projects\Tibitest\Release\Tibitest.lib and object C:\Users\Enderpt\documents\visual studio 2010\Projects\Tibitest\Release\Tibitest.exp 1>Tibitest.obj : error LNK2001: unresolved external symbol _mysql_close@4 1>Tibitest.obj : error LNK2001: unresolved external symbol _mysql_query@8 1>Tibitest.obj : error LNK2001: unresolved external symbol _mysql_real_connect@32 1>Tibitest.obj : error LNK2001: unresolved external symbol _mysql_init@4 1>C:\Users\Enderpt\documents\visual studio 2010\Projects\Tibitest\Release\Tibitest.dll : fatal error LNK1120: 4 unresolved externals
    Mutasd a teljes hozzászólást!
  • __cdecl váltsad át a linkernél Advanced
    Mutasd a teljes hozzászólást!
  • Ilyet (__cdecl) nem találtam (Linker --> Advanced)
    Amik vannak (kép):
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Bocs...
    C/C++-> Advanced
    Mutasd a teljes hozzászólást!
  • Át állítottam mind a 2 db másik lehetőségre is, ugyan azt a hibát adja mindegyiknél.
    Mutasd a teljes hozzászólást!
  • Mutasd pontosan honnan töltötted le a mysql.lib-et.
    Mutasd a teljes hozzászólást!
  • @sanya kérdését kiegészítem.
    Innen töltötted le?
    itt
    Mutasd a teljes hozzászólást!
  • Nem, hanem innen, a mysql 5.5.2-t 64 bites rendszerhez az msi installert:

    Link

    De megvan a connector is, azt onnan szedtem le.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd