2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 <2021> 2022 2023 2024 | Index | 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 <2021> 2022 2023 2024 |
<== Date ==> | <== Thread ==> |
---|
Subject: | RE: Problem building ezcaIDL on Windows |
From: | Mark Rivers via Core-talk <core-talk at aps.anl.gov> |
To: | Mark Rivers <rivers at cars.uchicago.edu> |
Cc: | EPICS core-talk <core-talk at aps.anl.gov> |
Date: | Fri, 11 Jun 2021 14:49:33 +0000 |
Note that the existing version of the DLL am using was built in 2013, so it is definitely built with old versions of base and Visual Studio. This is the output of dumpbin/exports, which shows that the DLL is exporting undecorated symbols, which is what I need. H:\epics\extensions\bin\windows-x64>dumpbin /exports ezcaIDL.dll Microsoft (R) COFF/PE Dumper Version 14.00.24215.1 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file ezcaIDL.dll File Type: DLL Section contains the following exports for ezcaIDL.dll 00000000 characteristics 5151CC01 time date stamp Tue Mar 26 11:25:37 2013 0.00 version 1 ordinal base 53 number of functions 53 number of names ordinal hint RVA name 1 0 00060A80 EzcaAddMonitorArray 2 1 00060790 EzcaCheckMonitorArray 3 2 00060910 EzcaClearMonitorArray 4 3 0005FFC0 EzcaDebug 5 4 00060DA0 EzcaGetArrayEventValues 6 5 00060E20 EzcaGetArrayTypeCount 7 6 00060EE0 EzcaGetArrayValues 8 7 00060FB0 EzcaGetError 9 8 00060850 EzcaGetMonitorArray 10 9 00060290 EzcaInit 11 A 000600F0 EzcaMonitorQueue_Add 12 B 00060090 EzcaMonitorQueue_Clear 13 C 00060160 EzcaMonitorQueue_Get 14 D 00060030 EzcaMonitorQueue_Zero 15 E 00061160 EzcaMonitorScan_Add 16 F 00060BA0 EzcaMonitorScan_Clear 17 10 00060B70 EzcaMonitorScan_Get 18 11 00060B10 EzcaMonitorScan_Zero 19 12 00060260 EzcaPendEvent 20 13 00060C00 EzcaPutArrayEventValues 21 14 00060CD0 EzcaPutArrayValues 22 15 00060190 EzcaSearchList 23 16 0005FFA0 EzcaSetPendTime 24 17 000610C0 EzcaTimeStamp 25 18 00060000 EzcaVersion 26 19 000602C0 ezcaIDLAutoErrorMessageOff 27 1A 000602E0 ezcaIDLAutoErrorMessageOn 28 1B 000610E0 ezcaIDLClearMonitor 29 1C 00060340 ezcaIDLDebugOff 30 1D 00060360 ezcaIDLDebugOn 31 1E 00060380 ezcaIDLEndGroup 32 1F 000604B0 ezcaIDLEndGroupWithReport 33 20 00060760 ezcaIDLGet 34 21 00061140 ezcaIDLGetControlLimits 35 22 000605C0 ezcaIDLGetCountAndType 36 23 000603A0 ezcaIDLGetEnumStrings 37 24 00060680 ezcaIDLGetErrorString 38 25 00061120 ezcaIDLGetGraphicLimits 39 26 00060740 ezcaIDLGetPrecision 40 27 00060530 ezcaIDLGetRetryCount 41 28 00060720 ezcaIDLGetStatus 42 29 00060550 ezcaIDLGetTimeout 43 2A 00060700 ezcaIDLGetUnits 44 2B 000605A0 ezcaIDLNewMonitorValue 45 2C 000606E0 ezcaIDLPerror 46 2D 00060650 ezcaIDLPut 47 2E 00060620 ezcaIDLPutOldCa 48 2F 00061100 ezcaIDLSetMonitor 49 30 00060570 ezcaIDLSetRetryCount 50 31 00060580 ezcaIDLSetTimeout 51 32 00060390 ezcaIDLStartGroup 52 33 00060300 ezcaIDLTraceOff 53 34 00060320 ezcaIDLTraceOn Summary 17000 .data 8000 .pdata 22000 .rdata 2000 .reloc 1000 .rsrc 6E000 .text This is the output of dumpbin /imports, which shows that although the DLL uses the Com and ca libraries, they are statically linked into the DLL, there is no dependency
of the DLL on Com.dll or ca.dll. That is what I want, so I can easily distribute the DLL without any dependencies. H:\epics\extensions\bin\windows-x64>dumpbin /imports ezcaIDL.dll Microsoft (R) COFF/PE Dumper Version 14.00.24215.1 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file ezcaIDL.dll File Type: DLL Section contains the following imports: WS2_32.dll 18006F390 Import Address Table 18008FFA0 Import Name Table 0 time date stamp 0 Index of first forwarder reference 36 WSAIoctl Ordinal 115 Ordinal 116 Ordinal 23 Ordinal 3 Ordinal 51 Ordinal 52 Ordinal 14 Ordinal 57 Ordinal 4 Ordinal 111 Ordinal 22 Ordinal 21 Ordinal 16 Ordinal 19 Ordinal 7 Ordinal 15 Ordinal 10 Ordinal 17 Ordinal 8 Ordinal 9 Ordinal 6 Ordinal 20 Ordinal 2 ADVAPI32.dll 18006F000 Import Address Table 18008FC10 Import Name Table 0 time date stamp 0 Index of first forwarder reference 15E GetUserNameA USER32.dll 18006F380 Import Address Table 18008FF90 Import Name Table 0 time date stamp 0 Index of first forwarder reference 1FC MessageBoxA KERNEL32.dll 18006F010 Import Address Table 18008FC20 Import Name Table 0 time date stamp 0 Index of first forwarder reference 79 CreateFileA 3D5 SetEnvironmentVariableA 55 CompareStringW 52 CompareStringA 400 SetStdHandle 19A GetConsoleOutputCP 486 WriteConsoleA 240 GetStringTypeW 362 ReadFile 3E4 SetFilePointer 1E8 GetLocaleInfoA 2A4 HeapReAlloc 2DD LCMapStringW 314 MultiByteToWideChar 2DB LCMapStringA 142 FlushFileBuffers 196 GetConsoleMode 184 GetConsoleCP 2A6 HeapSize 23D GetStringTypeA 1F9 GetModuleHandleW 354 RaiseException 2D5 IsValidCodePage 468 WaitForSingleObject 3D8 SetEvent 73 CreateEventA 43 CloseHandle 438 TlsGetValue 1AA GetCurrentProcess 1AD GetCurrentThread 2B4 InitializeCriticalSection 439 TlsSetValue 215 GetPriorityClass 425 Sleep 24E GetSystemTimeAdjustment 2E9 LeaveCriticalSection 40F SetThreadPriority DA EnterCriticalSection 1C7 GetExitCodeThread 261 GetThreadPriority BF DeleteCriticalSection 1AE GetCurrentThreadId D5 DuplicateHandle 436 TlsAlloc 437 TlsFree 42B SuspendThread 387 ResumeThread 148 FormatMessageA 95 CreateProcessA 239 GetStartupInfoA 1E6 GetLastError 2F7 LocalFree 8C CreateMutexA 371 ReleaseMutex 275 GetVersionExA 42F SystemTimeToTzSpecificLocalTime 42E SystemTimeToFileTime 51 CompareFileTime 34E QueryPerformanceCounter 24F GetSystemTimeAsFileTime 111 FileTimeToSystemTime 26B GetTimeZoneInformation 34F QueryPerformanceFrequency 140 FlsSetValue 170 GetCommandLineA 2A1 HeapFree 29D HeapAlloc 220 GetProcAddress 105 ExitProcess 442 UnhandledExceptionFilter 419 SetUnhandledExceptionFilter 389 RtlCaptureContext 490 WriteConsoleW 1D8 GetFileType 23B GetStdHandle 106 ExitThread A3 CreateThread 1AF GetDateFormatA 268 GetTimeFormatA 392 RtlPcToFileHeader 431 TerminateProcess 2CB IsDebuggerPresent 397 RtlVirtualUnwind 390 RtlLookupFunctionEntry 396 RtlUnwindEx D6 EncodePointer B8 DecodePointer 13F FlsGetValue 13E FlsFree 3F0 SetLastError 13D FlsAlloc 3EC SetHandleCount 1F4 GetModuleFileNameA 14B FreeEnvironmentStringsA 1C0 GetEnvironmentStrings 14C FreeEnvironmentStringsW 47E WideCharToMultiByte 1C2 GetEnvironmentStringsW 2A5 HeapSetInformation 29F HeapCreate 2A0 HeapDestroy 266 GetTickCount 1AB GetCurrentProcessId 491 WriteFile 2EB LoadLibraryA 2B5 InitializeCriticalSectionAndSpinCount 15C GetCPInfo 153 GetACP 213 GetOEMCP Summary 17000 .data 8000 .pdata 22000 .rdata 2000 .reloc 1000 .rsrc 6E000 .text Thanks, Mark From: Core-talk <core-talk-bounces at aps.anl.gov> On Behalf Of
Mark Rivers via Core-talk I am trying to build the master branch of
https://github.com/epics-extensions/ezcaIDL on windows-x64 with base 7.0.4 and VS 2015. This used to build OK, either on an earlier version of base or VS or both. This extension builds a shareable library/DLL to call Channel Access from IDL. It depends on extensions/ezca and extensions/EzcaScan. Both of those libraries build fine on Windows. ezcaIDL builds fine on Linux. However, on Windows I get this: H:\epics\extensions\src\ezcaIDL>make make -C O.windows-x64 -f ../Makefile TOP=../../.. \ T_A=windows-x64 install make[1]: Entering directory 'H:/epics/extensions/src/ezcaIDL/O.windows-x64' link -nologo -subsystem:windows -dll -LTCG -incremental:no -opt:ref -release -MACHINE:X64 /manifest -out:ezcaIDL.dll -implib:ezcaIDL.lib -def:../ezcaIDL.def ezcaIDL.obj ../../../lib/windows-x64/ezca.lib ../../../lib/windows-x64/EzcaScan.lib
../../../../base/lib/windows-x64/ca.lib ../../../../base/lib/windows-x64/Com.lib ws2_32.lib advapi32.lib user32.lib ezcaIDL.obj : warning LNK4197: export 'EzcaMonitorQueue_Zero' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaMonitorQueue_Clear' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaMonitorQueue_Add' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaMonitorQueue_Get' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaCheckMonitorArray' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaGetMonitorArray' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaClearMonitorArray' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaAddMonitorArray' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaMonitorScan_Zero' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaMonitorScan_Get' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaMonitorScan_Clear' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaMonitorScan_Add' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaPutArrayEventValues' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaPutArrayValues' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaGetArrayEventValues' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaGetArrayTypeCount' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaGetArrayValues' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaGetError' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaSearchList' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaTimeStamp' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaSetPendTime' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaPendEvent' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaInit' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaDebug' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'EzcaVersion' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLAutoErrorMessageOff' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLAutoErrorMessageOn' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLTraceOff' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLTraceOn' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLDebugOff' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLDebugOn' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLEndGroup' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLStartGroup' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLGetEnumStrings' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLEndGroupWithReport' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLGetRetryCount' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLGetTimeout' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLSetRetryCount' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLSetTimeout' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLNewMonitorValue' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLClearMonitor' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLSetMonitor' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLGetCountAndType' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLPutOldCa' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLPut' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLGetErrorString' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLPerror' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLGetUnits' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLGetStatus' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLGetPrecision' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLGetGraphicLimits' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLGetControlLimits' specified multiple times; using first specification ezcaIDL.obj : warning LNK4197: export 'ezcaIDLGet' specified multiple times; using first specification Creating library ezcaIDL.lib and object ezcaIDL.exp ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_search_list ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_getArrayEvent ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaTraceOn ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaGetTimeout ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaTraceOff ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_getTypeCount ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaNewMonitorValue ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaSetRetryCount ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaSetMonitor ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaDebugOff ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaEndGroup ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaEndGroupWithReport ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_version ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaGetPrecision ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_scanClearMonitor ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_scanZeroMonitor ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_monitorArrayCheck ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaPut ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_debug ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaPutOldCa ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaGetRetryCount ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaPvToChid ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaDebugOn ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_get_error_array ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaGetGraphicLimits ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaGetStatus ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaGetControlLimits ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_queueClear ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaAutoErrorMessageOn ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_queueGet ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_scanGetMonitor ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_putArray ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaGetErrorString ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_scanAdd ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_setPendTime ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaSetTimeout ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaFree ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_CA ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaClearMonitor ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaAutoErrorMessageOff ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_timeStamp ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_monitorArrayGet ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_getArray ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaGet ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_monitorArrayAdd ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_queueAdd ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaStartGroup ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_monitorArrayClear ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_queueZero ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_putArrayEvent ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaGetUnits ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_Ezca_init ezcaIDL.obj : error LNK2001: unresolved external symbol __imp_ezcaPerror ezcaIDL.dll : fatal error LNK1120: 53 unresolved externals make[1]: *** [../../../../base/configure/RULES_BUILD:298: ezcaIDL.dll] Error 1120 make[1]: Leaving directory 'H:/epics/extensions/src/ezcaIDL/O.windows-x64' make: *** [../../../base/configure/RULES_ARCHS:58: install.windows-x64] Error 2 Note that it uses a .DEF file to define what symbols should be exported. Has support for that changed? If so, how do I need to do it now? Thanks, Mark |