D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 1529 - using std.socket and calling ntohl in class member causes link failure
Summary: using std.socket and calling ntohl in class member causes link failure
Status: RESOLVED WORKSFORME
Alias: None
Product: D
Classification: Unclassified
Component: phobos (show other issues)
Version: D2
Hardware: x86 Windows
: P2 major
Assignee: No Owner
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-09-23 07:07 UTC by Regan Heath
Modified: 2015-06-09 01:14 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Regan Heath 2007-09-23 07:07:56 UTC
Using ntohl from std.c.windows.winsock in a class member while also using something from std.socket causes linking errors.

//TEST CASE

import std.socket;
import std.c.windows.winsock;

pragma(lib, "wsock32.lib");

class IndexPacketReader
{
    //static void foo()  //works
    void foo()
    {
        ntohl(1);  //fails
    }
}

void main()
{
    new TcpSocket();
    //ntohl(1); //works
}

E:\D\src\tmp>dmd bug003.d
E:\D\dmd\bin\..\..\dm\bin\link.exe bug003,,,user32+kernel32/noi;
OPTLINK (R) for Win32  Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved

E:\D\dmd\bin\..\lib\phobos.lib(winsock)  Offset 276FEH Record Type 00C3
 Error 1: Previous Definition Different : _ntohl@4
--- errorlevel 1 

Removing the "new TcpSocket()" makes it link.
Making the class member static makes it link.
Calling it from main makes it link.

I have tried removing the pragma and specifying the .lib in the command line, no change.  I have tried uising ws2_32.lib instead of wsock32.lib, no change.

In my case I wrote my own ntohl to get past the problem.
Comment 1 Vladimir Panteleev 2011-08-23 19:12:21 UTC
Seems to work with DMD 2.054.