www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 17851] New: htonl already defined in phobos64.lib

https://issues.dlang.org/show_bug.cgi?id=17851

          Issue ID: 17851
           Summary: htonl already defined in phobos64.lib
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: normal
          Priority: P1
         Component: druntime
          Assignee: nobody puremagic.com
          Reporter: bitworld qq.com

When building a simple demo for
libevent(https://github.com/D-Programming-Deimos/libevent) on Windows 10 X64, I
got these errors blown:


ws2_32.lib(WS2_32.dll) : error LNK2005: htonl already defined in
phobos64.lib(winsock2_1f3b_225.obj)
ws2_32.lib(WS2_32.dll) : error LNK2005: htons already defined in
phobos64.lib(winsock2_1f3a_22c.obj)
ws2_32.lib(WS2_32.dll) : error LNK2005: ntohl already defined in
phobos64.lib(winsock2_1f3d_225.obj)
ws2_32.lib(WS2_32.dll) : error LNK2005: ntohs already defined in
phobos64.lib(winsock2_1f3c_22c.obj)


I redefined these functions in druntime\src\core\sys\windows\winsock2.d. For
example:

    uint htonl(uint x)
    {
        return bswap(x);
    }

is changed to:
   uint htonl(uint x);

After rebuilding the phobos64.lib, I can eliminate these errors.


Here is a test code:

import std.stdio;
import deimos.event2.event; 
import std.socket;

void main()
{  

    event_base_loopbreak(null);

    InternetAddress addr1 = new InternetAddress("127.0.0.1", 80);
    writeln(addr1.port);
    writeln(addr1.addr);
}

Compiler: dmd v2.076.0/VC++ 2017
OS: Windows 10 x64

--
Sep 22