www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - OptLink and D DLL creation

reply Derek Parnell <derek nomail.afraid.org> writes:
I'm trying to get OptLink to create a DLL. Note: I'm not using DMD to
invoke OptLink, but doing it myself. 

Using the D source file example found at 

   http://www.digitalmars.com/d/dll.html#Dcode

I can compile this using DMD quite ok.

  dmd -c mydll.d 

I then try this ...

  set LIB=c:\dmd\lib;c:\dm\lib
  link mydll.obj,mydll.dll,mydll.map,phobos.lib,mydll.def/noi/map

where mydll.def looks like ...

  LIBRARY "mydll.dll"
  EXETYPE NT
  SUBSYSTEM WINDOWS,5.0
  CODE PRELOAD DISCARDABLE SHARED EXECUTE
  DATA PRELOAD SINGLE WRITE

And optlink spews forth ...

c:\dmd\lib\phobos.lib(deh)
 Error 42: Symbol Undefined _RaiseException 16
c:\dmd\lib\phobos.lib(monitor)
 Error 42: Symbol Undefined _DeleteCriticalSection 4
c:\dmd\lib\phobos.lib(monitor)
 Error 42: Symbol Undefined _LeaveCriticalSection 4
c:\dmd\lib\phobos.lib(monitor)
 Error 42: Symbol Undefined _EnterCriticalSection 4
c:\dmd\lib\phobos.lib(monitor)
 Error 42: Symbol Undefined _InitializeCriticalSection 4
c:\dm\bin\..\lib\SNN.lib(dllstart)
 Error 42: Symbol Undefined _GetCurrentThreadId 0
c:\dm\bin\..\lib\SNN.lib(dllstart)
 Error 42: Symbol Undefined _GetVersion 0
c:\dm\bin\..\lib\SNN.lib(cinit)
 Error 42: Symbol Undefined _GetEnvironmentStrings 0
c:\dm\bin\..\lib\SNN.lib(cinit)
 Error 42: Symbol Undefined _FreeEnvironmentStringsA 4
c:\dm\bin\..\lib\SNN.lib(ehsup)
 Error 42: Symbol Undefined _RtlUnwind 16
c:\dm\bin\..\lib\SNN.lib(thsup)
 Error 42: Symbol Undefined _CloseHandle 4
c:\dm\bin\..\lib\SNN.lib(semlock)
 Error 42: Symbol Undefined _CreateSemaphoreA 16
c:\dm\bin\..\lib\SNN.lib(semlock)
 Error 42: Symbol Undefined _ReleaseSemaphore 12
c:\dm\bin\..\lib\SNN.lib(semlock)
 Error 42: Symbol Undefined _WaitForSingleObject 8
c:\dm\bin\..\lib\SNN.lib(semlock)
 Error 42: Symbol Undefined _GetTickCount 0
c:\dm\bin\..\lib\SNN.lib(io)
 Error 42: Symbol Undefined _GetStdHandle 4
c:\dm\bin\..\lib\SNN.lib(io)
 Error 42: Symbol Undefined _SetHandleCount 4
c:\dm\bin\..\lib\SNN.lib(io)
 Error 42: Symbol Undefined _DeleteFileA 4
c:\dm\bin\..\lib\SNN.lib(wctomb)
 Error 42: Symbol Undefined _WideCharToMultiByte 32
c:\dm\bin\..\lib\SNN.lib(ISMBDIGI)
 Error 42: Symbol Undefined _GetStringTypeA 20
c:\dm\bin\..\lib\SNN.lib(signal)
 Error 42: Symbol Undefined _SetConsoleCtrlHandler 8
c:\dm\bin\..\lib\SNN.lib(_exit)
 Error 42: Symbol Undefined _ExitProcess 4
c:\dm\bin\..\lib\SNN.lib(flush)
 Error 42: Symbol Undefined _SetFilePointer 16
c:\dm\bin\..\lib\SNN.lib(setnterr)
 Error 42: Symbol Undefined _GetLastError 0
c:\dm\bin\..\lib\SNN.lib(w32fater)
 Error 42: Symbol Undefined _WriteConsoleA 20
c:\dm\bin\..\lib\SNN.lib(setmbcp)
 Error 42: Symbol Undefined _GetACP 0
c:\dm\bin\..\lib\SNN.lib(setmbcp)
 Error 42: Symbol Undefined _GetOEMCP 0
c:\dm\bin\..\lib\SNN.lib(setmbcp)
 Error 42: Symbol Undefined _GetCPInfo 8
c:\dm\bin\..\lib\SNN.lib(except)
 Error 42: Symbol Undefined _SetUnhandledExceptionFilter 4
c:\dm\bin\..\lib\SNN.lib(read)
 Error 42: Symbol Undefined _ReadFile 20
c:\dm\bin\..\lib\SNN.lib(isatty)
 Error 42: Symbol Undefined _GetFileType 4
c:\dm\bin\..\lib\SNN.lib(write)
 Error 42: Symbol Undefined _GlobalFree 4
c:\dm\bin\..\lib\SNN.lib(write)
 Error 42: Symbol Undefined _WriteFile 20
c:\dm\bin\..\lib\SNN.lib(write)
 Error 42: Symbol Undefined _GlobalAlloc 8
c:\dm\bin\..\lib\SNN.lib(sbrk)
 Error 42: Symbol Undefined _VirtualFree 12
c:\dm\bin\..\lib\SNN.lib(sbrk)
 Error 42: Symbol Undefined _VirtualAlloc 16


Now this looks a lot like another library or object file(s) is required to
make it work. What is that? Or how do I call OptLink to make it happen.

Note that just using dmd to do both compile and link steps works fine.


  dmd mydll.d mydll.def


I want to do it in separate steps, so just humor me and assume that this is
a valid request.

[P.S. If you are going to quote this post in a reply, please remember to
cut out all the original lines not relevant to the reply]

-- 
Derek
(skype: derek.j.parnell)
Melbourne, Australia
"Justice for David Hicks!"
12/02/2007 3:24:10 PM
Feb 11 2007
parent reply Daniel Giddings <dgiddings bigworldtech.com> writes:
They look to be from kernel32.lib. DMD looks to link against user32.lib, 
and kernel32.lib by default. There are copies of them in \dm\lib.

Derek Parnell wrote:
 I'm trying to get OptLink to create a DLL. Note: I'm not using DMD to
 invoke OptLink, but doing it myself. 
 
 Using the D source file example found at 
 
    http://www.digitalmars.com/d/dll.html#Dcode
 
 I can compile this using DMD quite ok.
 
   dmd -c mydll.d 
 
 I then try this ...
 
   set LIB=c:\dmd\lib;c:\dm\lib
   link mydll.obj,mydll.dll,mydll.map,phobos.lib,mydll.def/noi/map
 
 where mydll.def looks like ...
 
   LIBRARY "mydll.dll"
   EXETYPE NT
   SUBSYSTEM WINDOWS,5.0
   CODE PRELOAD DISCARDABLE SHARED EXECUTE
   DATA PRELOAD SINGLE WRITE
 
 And optlink spews forth ...
 
 c:\dmd\lib\phobos.lib(deh)
  Error 42: Symbol Undefined _RaiseException 16
 c:\dmd\lib\phobos.lib(monitor)
  Error 42: Symbol Undefined _DeleteCriticalSection 4
 c:\dmd\lib\phobos.lib(monitor)
  Error 42: Symbol Undefined _LeaveCriticalSection 4
 c:\dmd\lib\phobos.lib(monitor)
  Error 42: Symbol Undefined _EnterCriticalSection 4
 c:\dmd\lib\phobos.lib(monitor)
  Error 42: Symbol Undefined _InitializeCriticalSection 4
 c:\dm\bin\..\lib\SNN.lib(dllstart)
  Error 42: Symbol Undefined _GetCurrentThreadId 0
 c:\dm\bin\..\lib\SNN.lib(dllstart)
  Error 42: Symbol Undefined _GetVersion 0
 c:\dm\bin\..\lib\SNN.lib(cinit)
  Error 42: Symbol Undefined _GetEnvironmentStrings 0
 c:\dm\bin\..\lib\SNN.lib(cinit)
  Error 42: Symbol Undefined _FreeEnvironmentStringsA 4
 c:\dm\bin\..\lib\SNN.lib(ehsup)
  Error 42: Symbol Undefined _RtlUnwind 16
 c:\dm\bin\..\lib\SNN.lib(thsup)
  Error 42: Symbol Undefined _CloseHandle 4
 c:\dm\bin\..\lib\SNN.lib(semlock)
  Error 42: Symbol Undefined _CreateSemaphoreA 16
 c:\dm\bin\..\lib\SNN.lib(semlock)
  Error 42: Symbol Undefined _ReleaseSemaphore 12
 c:\dm\bin\..\lib\SNN.lib(semlock)
  Error 42: Symbol Undefined _WaitForSingleObject 8
 c:\dm\bin\..\lib\SNN.lib(semlock)
  Error 42: Symbol Undefined _GetTickCount 0
 c:\dm\bin\..\lib\SNN.lib(io)
  Error 42: Symbol Undefined _GetStdHandle 4
 c:\dm\bin\..\lib\SNN.lib(io)
  Error 42: Symbol Undefined _SetHandleCount 4
 c:\dm\bin\..\lib\SNN.lib(io)
  Error 42: Symbol Undefined _DeleteFileA 4
 c:\dm\bin\..\lib\SNN.lib(wctomb)
  Error 42: Symbol Undefined _WideCharToMultiByte 32
 c:\dm\bin\..\lib\SNN.lib(ISMBDIGI)
  Error 42: Symbol Undefined _GetStringTypeA 20
 c:\dm\bin\..\lib\SNN.lib(signal)
  Error 42: Symbol Undefined _SetConsoleCtrlHandler 8
 c:\dm\bin\..\lib\SNN.lib(_exit)
  Error 42: Symbol Undefined _ExitProcess 4
 c:\dm\bin\..\lib\SNN.lib(flush)
  Error 42: Symbol Undefined _SetFilePointer 16
 c:\dm\bin\..\lib\SNN.lib(setnterr)
  Error 42: Symbol Undefined _GetLastError 0
 c:\dm\bin\..\lib\SNN.lib(w32fater)
  Error 42: Symbol Undefined _WriteConsoleA 20
 c:\dm\bin\..\lib\SNN.lib(setmbcp)
  Error 42: Symbol Undefined _GetACP 0
 c:\dm\bin\..\lib\SNN.lib(setmbcp)
  Error 42: Symbol Undefined _GetOEMCP 0
 c:\dm\bin\..\lib\SNN.lib(setmbcp)
  Error 42: Symbol Undefined _GetCPInfo 8
 c:\dm\bin\..\lib\SNN.lib(except)
  Error 42: Symbol Undefined _SetUnhandledExceptionFilter 4
 c:\dm\bin\..\lib\SNN.lib(read)
  Error 42: Symbol Undefined _ReadFile 20
 c:\dm\bin\..\lib\SNN.lib(isatty)
  Error 42: Symbol Undefined _GetFileType 4
 c:\dm\bin\..\lib\SNN.lib(write)
  Error 42: Symbol Undefined _GlobalFree 4
 c:\dm\bin\..\lib\SNN.lib(write)
  Error 42: Symbol Undefined _WriteFile 20
 c:\dm\bin\..\lib\SNN.lib(write)
  Error 42: Symbol Undefined _GlobalAlloc 8
 c:\dm\bin\..\lib\SNN.lib(sbrk)
  Error 42: Symbol Undefined _VirtualFree 12
 c:\dm\bin\..\lib\SNN.lib(sbrk)
  Error 42: Symbol Undefined _VirtualAlloc 16
 
 
 Now this looks a lot like another library or object file(s) is required to
 make it work. What is that? Or how do I call OptLink to make it happen.
 
 Note that just using dmd to do both compile and link steps works fine.
 
 
   dmd mydll.d mydll.def
 
 
 I want to do it in separate steps, so just humor me and assume that this is
 a valid request.
 
 [P.S. If you are going to quote this post in a reply, please remember to
 cut out all the original lines not relevant to the reply]
 
Feb 11 2007
parent Derek Parnell <derek nomail.afraid.org> writes:
On Mon, 12 Feb 2007 15:48:52 +1100, Daniel Giddings wrote:

 They look to be from kernel32.lib. DMD looks to link against user32.lib, 
 and kernel32.lib by default. There are copies of them in \dm\lib.
Damn! <G> I knew that [... slips away without anyone else noticing ...] -- Derek (skype: derek.j.parnell) Melbourne, Australia "Justice for David Hicks!" 12/02/2007 3:53:38 PM
Feb 11 2007