visual studio c ++ redis(msopentech port)客户端,hiredis

时间:2014-05-23 08:21:55

标签: c++ redis visual-studio-2013 hiredis

我是c ++的新手,我决定尝试使用visual studio c ++,boost,llvm(已经使用boost 1.55和visual studio 2013失败)和redis。

这是一个小型宠物项目,用于将从套接字和缓存读取的原始数据解析为redis。

当我尝试链接到hiredis.lib时,我遇到了很多错误。

我知道我做错了什么,但我的试验变成了无休止的循环。我可以指导它,非常感谢。

亲切的问候。

错误:

1>------ Build started: Project: example4, Configuration: Debug x64 ------
1>  Source.cpp
1>LIBCMTD.lib(dosmap.obj) : error LNK2005: _errno already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: _CrtSetCheckCount already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: _aligned_free already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: _aligned_malloc already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: _calloc_dbg already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(_wctype.obj) : error LNK2005: iswalnum already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(_wctype.obj) : error LNK2005: iswalpha already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(_wctype.obj) : error LNK2005: iswgraph already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(_wctype.obj) : error LNK2005: iswspace already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(mlock.obj) : error LNK2005: _lock already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(mlock.obj) : error LNK2005: _unlock already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(winapisupp.obj) : error LNK2005: __crtCaptureCurrentContext already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(winapisupp.obj) : error LNK2005: __crtCapturePreviousContext already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(winapisupp.obj) : error LNK2005: __crtSetUnhandledExceptionFilter already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(winapisupp.obj) : error LNK2005: __crtTerminateProcess already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(winapisupp.obj) : error LNK2005: __crtUnhandledException already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(tidtable.obj) : error LNK2005: _getptd already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(invarg.obj) : error LNK2005: _invalid_parameter already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(sprintf.obj) : error LNK2005: sprintf already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(_file.obj) : error LNK2005: __iob_func already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(_file.obj) : error LNK2005: _lock_file already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(_file.obj) : error LNK2005: _unlock_file already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: _amsg_exit already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: _cexit already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: _exit already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: _initterm_e already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(crt0dat.obj) : error LNK2005: exit already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(errmode.obj) : error LNK2005: __set_app_type already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(winxfltr.obj) : error LNK2005: _XcptFilter already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(wsetloca.obj) : error LNK2005: _configthreadlocale already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(vsnprnc.obj) : error LNK2005: vsprintf_s already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(fflush.obj) : error LNK2005: fflush already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: __xi_a already defined in MSVCRTD.lib(cinitexe.obj)
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: __xi_z already defined in MSVCRTD.lib(cinitexe.obj)
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: __xc_a already defined in MSVCRTD.lib(cinitexe.obj)
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: __xc_z already defined in MSVCRTD.lib(cinitexe.obj)
1>LIBCMTD.lib(dbgrptw.obj) : error LNK2005: _CrtDbgReportW already defined in MSVCRTD.lib(MSVCR120D.dll)
1>LIBCMTD.lib(printf.obj) : error LNK2005: printf already defined in MSVCRTD.lib(MSVCR120D.dll)
1>MSVCRTD.lib(MSVCR120D.dll) : error LNK2005: strcpy_s already defined in LIBCMTD.lib(strcpy_s.obj)
1>MSVCRTD.lib(MSVCR120D.dll) : error LNK2005: iswdigit already defined in LIBCMTD.lib(_wctype.obj)
1>LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library
1>LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
1>hiredis.lib(hiredis.obj) : error LNK2019: unresolved external symbol strerror_r referenced in function __redisSetError
1>hiredis.lib(net.obj) : error LNK2001: unresolved external symbol strerror_r
1>hiredis.lib(hiredis.obj) : error LNK2001: unresolved external symbol fdapi_close
1>hiredis.lib(net.obj) : error LNK2001: unresolved external symbol fdapi_close
1>hiredis.lib(net.obj) : error LNK2001: unresolved external symbol fcntl
1>hiredis.lib(net.obj) : error LNK2001: unresolved external symbol poll
1>F:\SoftwareDevelopment\cplusplus\example4\x64\Debug\example4.exe : fatal error LNK1120: 4 unresolved externals
========== Build: 0 succeeded, 1 failed, 2 up-to-date, 0 skipped ==========

项目文件:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.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="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{FADCAD1B-D309-427E-8A12-2140E0CC1E3C}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>example4</RootNamespace>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v120</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v120</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v120</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v120</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </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 Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
    <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>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
    <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)'=='Debug|x64'">
    <LinkIncremental>true</LinkIncremental>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <LinkIncremental>false</LinkIncremental>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <LinkIncremental>false</LinkIncremental>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>F:\Software\boost_1_55_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <DebugInformationFormat>None</DebugInformationFormat>
      <MultiProcessorCompilation>true</MultiProcessorCompilation>
      <MinimalRebuild>false</MinimalRebuild>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>F:\Software\boost_1_55_0\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
    <PostBuildEvent>
      <Command>copy *.config "$(TargetDir)*.config"</Command>
    </PostBuildEvent>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <AdditionalIncludeDirectories>F:\Software\boost_1_55_0;F:\Software\redis\deps\hiredis;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <DebugInformationFormat>None</DebugInformationFormat>
      <MultiProcessorCompilation>true</MultiProcessorCompilation>
      <MinimalRebuild>false</MinimalRebuild>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalLibraryDirectories>F:\Software\boost_1_55_0\stage\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
    <PostBuildEvent>
      <Command>copy *.config "$(TargetDir)*.config"</Command>
    </PostBuildEvent>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>
      </PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <PrecompiledHeader>
      </PrecompiledHeader>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <None Include="app.config" />
    <None Include="log.config">
      <DeploymentContent>true</DeploymentContent>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
      </ExcludedFromBuild>
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
      </ExcludedFromBuild>
    </None>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="Source.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\..\..\..\Software\redis\msvs\hiredis\hiredis.vcxproj">
      <Project>{13e85053-54b3-487b-8ddb-3430b1c1b3bf}</Project>
      <Private>true</Private>
      <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
      <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
      <LinkLibraryDependencies>true</LinkLibraryDependencies>
      <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets" />
</Project>

3 个答案:

答案 0 :(得分:2)

在构建使用hiredis的可执行文件时,请务必在

下链接 hiredis.libWin32_Interop.lib
Configuration Properties > Linker > Input > Additional Dependencies

此外,您可能希望将正在构建的所有项目的运行时库更改为dll版本(Multi-threaded DLL (/MD)

Configuration Properties > C/C++ > Code Generation > Runtime-Library

答案 1 :(得分:1)

您需要关联hiredis.libWin32_Interop.lib

您看到的错误是因为您使用的hiredis.lib是使用(多线程(/ MT))构建的,并且您的可执行文件使用/ MD运行时库。

您可以在

下进行更改
Configuration Properties > C/C++ > Code Generation > Runtime-Library

https://github.com/MSOpenTech/redis下载源代码 并使用/ MD标志和正确的平台(Win32或x64)重建hiredis.libWin32_Interop.lib。 这两个项目都在/msvc/RedisServer.sln

答案 2 :(得分:0)

首先,设置项目属性

1

项目&gt;物业&gt;配置属性

  

一般&gt;项目默认值&gt;字符集   使用多字节字符集

2

  

C / C ++&gt;代码生成&gt;运行时库   多线程调试(/ MTd)

然后尝试编译你的项目...

新错误似乎超出了)

1&gt; C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ V120 \ Microsoft.CppBuild.targets(376,5):错误MSB8031:为非Unicode字符构建MFC项目set已弃用。您必须将项目属性更改为Unicode或下载其他库。有关详细信息,请参阅http://go.microsoft.com/fwlink/p/?LinkId=286820

您必须下载&#34; MFC MBCS DLL&#34;

我尝试解决此问题,并下载并安装此文件...