www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - snn.lib , setmode and linker errors

reply Charlie <charlie.fats gmail.com> writes:
Hi,

Im trying to write a CGI lib in D, and it requires stdin be put in 
binaru mode for windows, which is done with setmode(), declared in io.h 
and is in snn.lib.  Here is the code:

import std.c.stdio;

void main ()
{

   version ( Windows )
     {
       int O_BINARY = 0x8000;
       extern ( C ) int setmode(int,int);
       setmode(stdin._file ,O_BINARY);
     }

}

And the error:

stest.obj(stest)
  Error 42: Symbol Undefined __D5stest4mainFZv7setmodeMUiiZi
--- errorlevel 1

Im explictly linking to snn.lib ( is that needed ? ) , why is it still 
undefined ?

Thanks,
Charlie
Mar 20 2007
next sibling parent Charlie <charlie.fats gmail.com> writes:
The following C code works fine ( taken from digitalmars website 


#include <stdio.h>
#include <io.h>
#include <fcntl.h>

void main ()
{
    int result;
    result = _setmode(_fileno(stdin), _O_BINARY);
    if (result == -1)
       perror("Error setting mode");
    else
       printf("Printer successfully set to text mode\n");
}




Charlie wrote:
 Hi,
 
 Im trying to write a CGI lib in D, and it requires stdin be put in 
 binaru mode for windows, which is done with setmode(), declared in io.h 
 and is in snn.lib.  Here is the code:
 
 import std.c.stdio;
 
 void main ()
 {
 
   version ( Windows )
     {
       int O_BINARY = 0x8000;
       extern ( C ) int setmode(int,int);
       setmode(stdin._file ,O_BINARY);
     }
 
 }
 
 And the error:
 
 stest.obj(stest)
  Error 42: Symbol Undefined __D5stest4mainFZv7setmodeMUiiZi
 --- errorlevel 1
 
 Im explictly linking to snn.lib ( is that needed ? ) , why is it still 
 undefined ?
 
 Thanks,
 Charlie
Mar 20 2007
prev sibling parent reply Derek Parnell <derek nomail.afraid.org> writes:
On Tue, 20 Mar 2007 19:53:28 -0500, Charlie wrote:

 Hi,
 
 Im trying to write a CGI lib in D, and it requires stdin be put in 
 binaru mode for windows, which is done with setmode(), declared in io.h 
 and is in snn.lib.  Here is the code:
 
 import std.c.stdio;
 
 void main ()
 {
 
    version ( Windows )
      {
        int O_BINARY = 0x8000;
        extern ( C ) int setmode(int,int);
        setmode(stdin._file ,O_BINARY);
      }
 
 }
 
 And the error:
 
 stest.obj(stest)
   Error 42: Symbol Undefined __D5stest4mainFZv7setmodeMUiiZi
 --- errorlevel 1
 
 Im explictly linking to snn.lib ( is that needed ? ) , why is it still 
 undefined ?
 
 Thanks,
 Charlie
Move the 'extern(C)' declaration out of the main() function. import std.c.stdio; version ( Windows ) extern ( C ) int setmode(int,int); void main () { version ( Windows ) { int O_BINARY = 0x8000; setmode(stdin._file ,O_BINARY); } } -- Derek (skype: derek.j.parnell) Melbourne, Australia "Justice for David Hicks!" 21/03/2007 12:10:30 PM
Mar 20 2007
parent Charlie <charlie.fats gmail.com> writes:
Many thanks!

Derek Parnell wrote:
 On Tue, 20 Mar 2007 19:53:28 -0500, Charlie wrote:
 
 Hi,

 Im trying to write a CGI lib in D, and it requires stdin be put in 
 binaru mode for windows, which is done with setmode(), declared in io.h 
 and is in snn.lib.  Here is the code:

 import std.c.stdio;

 void main ()
 {

    version ( Windows )
      {
        int O_BINARY = 0x8000;
        extern ( C ) int setmode(int,int);
        setmode(stdin._file ,O_BINARY);
      }

 }

 And the error:

 stest.obj(stest)
   Error 42: Symbol Undefined __D5stest4mainFZv7setmodeMUiiZi
 --- errorlevel 1

 Im explictly linking to snn.lib ( is that needed ? ) , why is it still 
 undefined ?

 Thanks,
 Charlie
Move the 'extern(C)' declaration out of the main() function. import std.c.stdio; version ( Windows ) extern ( C ) int setmode(int,int); void main () { version ( Windows ) { int O_BINARY = 0x8000; setmode(stdin._file ,O_BINARY); } }
Mar 21 2007