Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using msvc lib in mingw

i have a hardware (xray sensor) which has development tools. but afaiu these are built in msvc. so i have a .lib file and .dll file . if i include this lib file to my project (i am using qt), and put dll file to the exe folder and compile using MSVC-Release option everytihng works. But when i try to compile using mingw-Release option. it fails.

undefined reference to `imp__ZN6IDcDrv6CreateEPKci'

undefined reference to `imp__ZN6IDcDrv14GetDeviceCountEv'

can you point some way out so that i can use these lib. and dll files using mingw compiler

ps: i tried and failed impdef dclibsn.dll>dclib.def

dlltool -dllname dclibsn.dll --def dclib.def --output-lib libdclibsn.a

and this is how my def file looks like

LIBRARY "dclibsn.dll"
EXPORTS
??0DcDrv@@QAE@ABV0@@Z
??0DcDrv@@QAE@V?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z
??0IDcDrv@@QAE@ABV0@@Z
??0IDcDrv@@QAE@XZ
??1DcDrv@@QAE@XZ
??4DcDrv@@QAEAAV0@ABV0@@Z
??4IDcDrv@@QAEAAV0@ABV0@@Z
?CaptureImage@DcDrv@@AAE_NHHHK_NHH@Z
?CloseUsbDevice@DcDrv@@AAE_NXZ
?ColumnDefectComp@DcDrv@@AAEGPBGH@Z
?CompensationImage@DcDrv@@AAEXPAGQAEHH@Z
?Create@IDcDrv@@SAPAVDcDrv@@PBDH@Z

note the last entry in this file (Create. ) i am trying to call this in the program and i get

(.text+0x1ad): undefined reference to `_imp___ZN6IDcDrv6CreateEPKci'

and if i replace the line ?Create@IDcDrv@@SAPAVDcDrv@@PBDH@Z

with imp__ZN6IDcDrv6CreateEPKci it compiles, but gives error.

The procedure entry point _ZN6IDcDrv6CreateEPKci could not be located in the dynamic link library dclibsn.DLL. 
like image 394
ardavar Avatar asked Nov 14 '22 18:11

ardavar


1 Answers

See this : How to use libraries compiled with MingW in MSVC?

I mean surrounding #include with extern "C" block. Because using extern "C" will instruct the compiler that the functions are using C linkage, not C++, which will stop it from performing name mangling on the functions.

I think name mangling causes problem in linkage. Don't know this will help automatic using of dll or not. Hope it will. Becuase i need to write a CUDA based dll in MSVC 2005 and use it in mingw.

Hope this help. :-?

like image 154
Eremite Avatar answered Dec 20 '22 01:12

Eremite