【问题标题】:Build errors in visual studio 2010 C++ [duplicate]Visual Studio 2010 C++中的构建错误[重复]
【发布时间】:2014-09-23 07:33:07
【问题描述】:
Error   33  error C2375: 'accept' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1578
Error   34  error C2375: 'bind' : redefinition; different linkage   C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1600
Error   35  error C2375: 'closesocket' : redefinition; different linkage    C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1619
Error   36  error C2375: 'connect' : redefinition; different linkage    C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1638
Error   37  error C2375: 'ioctlsocket' : redefinition; different linkage    C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1659
Error   38  error C2375: 'getpeername' : redefinition; different linkage    C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1680
Error   39  error C2375: 'getsockname' : redefinition; different linkage    C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1701
Error   40  error C2375: 'getsockopt' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1724
Error   41  error C2375: 'htonl' : redefinition; different linkage  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1745
Error   42  error C2375: 'htons' : redefinition; different linkage  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1762
Error   43  error C2375: 'inet_addr' : redefinition; different linkage  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1780
Error   44  error C2375: 'inet_ntoa' : redefinition; different linkage  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1797
Error   45  error C2375: 'listen' : redefinition; different linkage C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h  1815

这些是我在准备构建项目时遇到的错误。我从搜索中发现,这可能是由于在包含 winsock2 之前包含了 windows.h。 但我没有直接包含任何这些文件。提前感谢您的帮助。

【问题讨论】:

  • 查看项目设置。
  • @lordkain 是的,它也包括在内,我也知道它的相关性。 "#include " 由 zmq.h 使用,因此无法删除。前进的方向是什么。

标签: c++ visual-studio-2010


【解决方案1】:

我通过以下方式解决了它。请让我知道任何其他意见:-

错误消息显示包含了第一个 winsock,然后包含了 winsock2。因此,编译器引发了重新定义错误(因为编译器已经遇到了这些结构)。

我通过以下方式更改了包含顺序:-

之前:-

#ifndef __ZMQ_H_INCLUDED__
#define __ZMQ_H_INCLUDED__

#ifdef __cplusplus
extern "C" {
#endif
#if !defined WINCE
#include <errno.h>
#endif
#include <stddef.h>
#include <stdio.h>
#if defined _WIN32
#include <winsock2.h>                           
#endif

After:-

#ifndef __ZMQ_H_INCLUDED__
#define __ZMQ_H_INCLUDED__

#ifdef __cplusplus
extern "C" {
#endif
#if !defined WINCE
#include <errno.h>
#endif
#include <stddef.h>
#include <stdio.h>
#if defined _WIN32
#ifndef _WINSOCKAPI_                              //ADDED
#include <winsock2.h>                           
#endif                                            //ADDED
#endif

【讨论】:

    【解决方案2】:

    由于 windows.h 包含 winsock.h(winsock2.h 的旧版本),因此您必须在行:

    #include <windows.h>
    

    正确的顺序应该是这样的:

    .
    .
    #include "zmq.h"
    .
    .
    #include <windows.h>
    

    【讨论】:

    • 仍然遇到同样的问题
    • 在'#include '之前尝试'#define WINSOCKAPI'
    • #include &lt;winsock2.h&gt;#include &lt;windows.h&gt;#include "zmq.h"
    • @MattMcNabb 仍然遇到同样的问题
    • 关闭预编译头文件(或更新您的预编译头文件)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 2011-11-14
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多