digitalmars.D.learn - Trouble with static linking
- Essoje Oliveira de Almeida (79/79) Feb 20 2006 I have a X68Sound.dll (not mine) that I'd like to use in my project, but...
- Jarrett Billingsley (11/21) Feb 20 2006 Those funny-looking name manglings are D name mangling. This is because...
I have a X68Sound.dll (not mine) that I'd like to use in my project, but I can't get it to link, and being a beginner D programmer doesn't help me much. I know I've used implib as "implib /system x68sound.lib x68sound.def" to create a library and tried to link it as it follows. The .lib, .def, and .dll and all in the same directory as the rest of the code. This is DDA.d ****************** module dda; import std.stdio; import X68Sound; int main() { int ret; ret = X68Sound_Start(); X68Sound_Free(); return 0; } ****************** And this one is x68sound.d ****************** module X68Sound; export int X68Sound_Start(int samprate=44100, int opmflag=1, int adpcmflag=1, int betw=5, int pcmbuf=5, int late=200, double rev=1.0); export void X68Sound_Free(); ****************** And this guys is X68Sound.def ****************** LIBRARY "X68Sound.dll" DESCRIPTION "X68k Sound Generator" EXPORTS X68Sound_Start 1 X68Sound_Samprate 2 X68Sound_Reset 3 X68Sound_Free 4 X68Sound_BetwInt 5 X68Sound_StartPcm 6 X68Sound_GetPcm 7 X68Sound_OpmPeek 8 X68Sound_OpmReg 9 X68Sound_OpmPoke 10 X68Sound_OpmInt 11 X68Sound_OpmWait 12 X68Sound_OpmClock 13 X68Sound_AdpcmPeek 14 X68Sound_AdpcmPoke 15 X68Sound_PpiPeek 16 X68Sound_PpiPoke 17 X68Sound_PpiCtrl 18 X68Sound_DmaPeek 19 X68Sound_DmaPoke 20 X68Sound_DmaInt 21 X68Sound_DmaErrInt 22 X68Sound_MemReadFunc 23 X68Sound_WaveFunc 24 X68Sound_Pcm8_Out 25 X68Sound_Pcm8_Aot 26 X68Sound_Pcm8_Lot 27 X68Sound_Pcm8_SetMode 28 X68Sound_Pcm8_GetRest 29 X68Sound_Pcm8_GetMode 30 X68Sound_Pcm8_Abort 31 X68Sound_TotalVolume 32 X68Sound_ErrorCode 33 X68Sound_DebugValue 34 ****************** And finally this is what I get... ****************** C:\Proj\DDS>dmd dda.d x68sound.lib C:\dm\bin\link.exe dda,,,x68sound.lib+user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved C:\DMD\BIN\..\lib\phobos.lib(dmain2) Error 42: Symbol Undefined _D8X68Sound14X68Sound_StartFiiiiiidZi C:\DMD\BIN\..\lib\phobos.lib(dmain2) Error 42: Symbol Undefined _D8X68Sound13X68Sound_FreeFZv ****************** Please enlight me in this. Thanks in advance, Essoje
Feb 20 2006
"Essoje Oliveira de Almeida" <Essoje_member pathlink.com> wrote in message news:dtdfh1$2qs7$1 digitaldaemon.com...And finally this is what I get... ****************** C:\Proj\DDS>dmd dda.d x68sound.lib C:\dm\bin\link.exe dda,,,x68sound.lib+user32+kernel32/noi; OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved C:\DMD\BIN\..\lib\phobos.lib(dmain2) Error 42: Symbol Undefined _D8X68Sound14X68Sound_StartFiiiiiidZi C:\DMD\BIN\..\lib\phobos.lib(dmain2) Error 42: Symbol Undefined _D8X68Sound13X68Sound_FreeFZvThose funny-looking name manglings are D name mangling. This is because the default extern type for functions is extern(D), so DMD mangles those exported functions with D mangling. Try surrounding the contents of the X86Sound.d module with an extern(C) block. Though I'm not entirely sure that will work, as DMD likes to prefix an underscore when mangling names to C, and it doesn't look like there are any underscores in the def. Go ahead and try it anyway. It doesn't look like you're using the def file on the commandline, so OPTLINK might like the C names in the lib.
Feb 20 2006