Experimental Physics and Industrial Control System
Hi,
I downloaded and compiled EPICS v4.4.0 on Windows (Visual Studio 2010/Windows 7/base 3-14-12-4) and exampleCPP/HelloWorld ran OK when compiled Release, but I recall having a crash when running in Debug mode. I say "recall" as I've subsequently gone back and now can't reproduce my original problem! However it set me on the path of removing some of the C4275 (non-dll-interface used as basis for dll-interface) and LNK4217 (locally defined symbol imported) warnings output during the debug build. I enclose the changes I made as, though not necessary for building with the Microsoft Compiler, they allow the code to be compiled under both MinGW and Cygwin too.
The MinGW build has a couple of small issues remaining. During compile there are various warning about "%z" or "%lli" not being supported in printf/sprintf, and pvaSvr.dll fails to link with:
dbUtil.o:dbUtil.cpp:(.text+0x1147): undefined reference to `_imp__epicsAlarmConditionStrings'
dbPv/caMonitor.cpp includes <alarmString.h> and dbPv/dbUtil.cpp includes <alarm.h> - a quick workaround to allow building is to change the "epicsShareExtern" to just "extern" in <epics base>/alarm.h so during linking the global instance defined in dbPv/caMonitor.cpp via <alarmString.h> is matched. I'm guessing by the presence of epicsShareExtern in <alarm.h> clients should be getting these strings from <epics base> itself, but I couldn't see them exported anywhere by base?
Regards,
Freddie
Index: pvaSrv/testTop/dbPv/src/Makefile
===================================================================
--- pvaSrv/testTop/dbPv/src/Makefile (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvaSrv/testTop/dbPv/src/Makefile (.../EPICS-CPP-4_4_0) (working copy)
@@ -31,7 +31,7 @@
testDbPvSupport_SRCS += bigstringinRecord.c
testDbPvSupport_SRCS += waitRecord.c
testDbPvSupport_SRCS += testDbPv.cpp
-testDbPvSupport_LIBS_WIN32 += pvAccess pvData dbIoc Com
+testDbPvSupport_LIBS += pvAccess pvData dbIoc Com
#=============================
# Build an IOC application
Index: pvaSrv/src/dbPv/dbPvProvider.cpp
===================================================================
--- pvaSrv/src/dbPv/dbPvProvider.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvaSrv/src/dbPv/dbPvProvider.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -26,6 +26,7 @@
#include <pv/noDefaultMethods.h>
#include <pv/lock.h>
+#define epicsExportSharedSymbols
#include "dbPv.h"
#include "caSecurity.h"
Index: pvDataCPP/src/pv/pvData.h
===================================================================
--- pvDataCPP/src/pv/pvData.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDataCPP/src/pv/pvData.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -10,7 +10,7 @@
#ifndef PVDATA_H
#define PVDATA_H
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(_MINGW)
#define NOMINMAX
#endif
@@ -410,6 +410,24 @@
friend class PVDataCreate;
};
+ template<>
+ inline std::ostream& PVScalarValue<int8>::dumpValue(std::ostream& o) const
+ {
+ return o << static_cast<int>(get());
+ }
+
+ template<>
+ inline std::ostream& PVScalarValue<uint8>::dumpValue(std::ostream& o) const
+ {
+ return o << static_cast<unsigned int>(get());
+ }
+
+ template<>
+ inline std::ostream& PVScalarValue<boolean>::dumpValue(std::ostream& o) const
+ {
+ return o << std::boolalpha << static_cast<bool>(get());
+ }
+
/**
* typedefs for the various possible scalar types.
*/
Index: pvDataCPP/src/pv/pvType.h
===================================================================
--- pvDataCPP/src/pv/pvType.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDataCPP/src/pv/pvType.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -15,7 +15,7 @@
#ifndef PVTYPE_H
#define PVTYPE_H
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(_MINGW)
#define NOMINMAX
#pragma warning(disable: 4251)
#endif
Index: pvDataCPP/src/factory/PVScalar.cpp
===================================================================
--- pvDataCPP/src/factory/PVScalar.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDataCPP/src/factory/PVScalar.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -30,21 +30,4 @@
return static_pointer_cast<const Scalar>(PVField::getField());
}
- template<>
- std::ostream& PVScalarValue<int8>::dumpValue(std::ostream& o) const
- {
- return o << static_cast<int>(get());
- }
-
- template<>
- std::ostream& PVScalarValue<uint8>::dumpValue(std::ostream& o) const
- {
- return o << static_cast<unsigned int>(get());
- }
-
- template<>
- std::ostream& PVScalarValue<boolean>::dumpValue(std::ostream& o) const
- {
- return o << std::boolalpha << static_cast<bool>(get());
- }
}}
Index: pvDataCPP/src/misc/parseToPOD.cpp
===================================================================
--- pvDataCPP/src/misc/parseToPOD.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDataCPP/src/misc/parseToPOD.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -249,9 +249,9 @@
}
#endif
-// MS Visual Studio 2013 defines strtoll, etc.
+// MS Visual Studio 2013 and MinGW define strtoll, etc.
#if defined(_WIN32)
-# if (_MSC_VER >= 1800)
+# if (_MSC_VER >= 1800) || defined(_MINGW)
# define WIN_NEEDS_OLL_FUNC 0
# else
# define WIN_NEEDS_OLL_FUNC 1
Index: pvDataCPP/src/misc/sharedVector.h
===================================================================
--- pvDataCPP/src/misc/sharedVector.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDataCPP/src/misc/sharedVector.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -7,7 +7,7 @@
#ifndef SHAREDVECTOR_H
#define SHAREDVECTOR_H
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(_MINGW)
#define NOMINMAX
#endif
Index: pvDataCPP/src/misc/epicsException.h
===================================================================
--- pvDataCPP/src/misc/epicsException.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDataCPP/src/misc/epicsException.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -34,7 +34,7 @@
#ifndef EPICSEXCEPTION_H_
#define EPICSEXCEPTION_H_
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(_MINGW)
#pragma warning( push )
#pragma warning(disable: 4275) // warning C4275: non dll-interface class used as base for dll-interface class (std::logic_error)
#endif
@@ -58,7 +58,7 @@
# include <execinfo.h>
# include <cxxabi.h>
# define EXCEPT_USE_BACKTRACE
-#elif defined(_WIN32) && !defined(__MINGW__) && !defined(SKIP_DBGHELP)
+#elif defined(_WIN32) && !defined(_MINGW) && !defined(SKIP_DBGHELP)
# define _WINSOCKAPI_
# include <windows.h>
# include <dbghelp.h>
@@ -215,7 +215,7 @@
mutable std::string base_msg;
};
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(_MINGW)
#pragma warning( pop )
#endif
Index: pvAccessCPP/src/utils/introspectionRegistry.cpp
===================================================================
--- pvAccessCPP/src/utils/introspectionRegistry.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/utils/introspectionRegistry.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -4,6 +4,7 @@
* in file LICENSE that is included with this distribution.
*/
+#define epicsExportSharedSymbols
#include <pv/introspectionRegistry.h>
#include <pv/convert.h>
#include <pv/serializationHelper.h>
Index: pvAccessCPP/src/utils/introspectionRegistry.h
===================================================================
--- pvAccessCPP/src/utils/introspectionRegistry.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/utils/introspectionRegistry.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -29,6 +29,8 @@
# undef introspectionRegistryEpicsExportSharedSymbols
#endif
+#include <shareLib.h>
+
// TODO check for memory leaks
namespace epics {
Index: pvAccessCPP/src/ca/caChannel.cpp
===================================================================
--- pvAccessCPP/src/ca/caChannel.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/ca/caChannel.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -5,10 +5,10 @@
*/
#include <epicsVersion.h>
+#include <pv/standardField.h>
+#define epicsExportSharedSymbols
#include <pv/logger.h>
-#include <pv/standardField.h>
-
#include <pv/caChannel.h>
using namespace epics::pvData;
Index: pvAccessCPP/src/ca/caProvider.cpp
===================================================================
--- pvAccessCPP/src/ca/caProvider.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/ca/caProvider.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -10,10 +10,10 @@
#include <cadef.h>
#include <epicsSignal.h>
-#include <pv/logger.h>
#define epicsExportSharedSymbols
+#include <pv/logger.h>
#include <pv/caProvider.h>
#include <pv/caChannel.h>
Index: pvAccessCPP/src/rpcService/rpcServer.h
===================================================================
--- pvAccessCPP/src/rpcService/rpcServer.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/rpcService/rpcServer.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -19,11 +19,12 @@
# undef rpcServerEpicsExportSharedSymbols
#endif
+#include <shareLib.h>
+
#include <pv/pvAccess.h>
#include <pv/rpcService.h>
#include <pv/serverContext.h>
-#include <shareLib.h>
namespace epics { namespace pvAccess {
Index: pvAccessCPP/src/pva/clientFactory.cpp
===================================================================
--- pvAccessCPP/src/pva/clientFactory.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/pva/clientFactory.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -5,11 +5,11 @@
*/
#include <pv/lock.h>
-#include <pv/logger.h>
#include <epicsSignal.h>
#define epicsExportSharedSymbols
+#include <pv/logger.h>
#include <pv/clientFactory.h>
#include <pv/clientContextImpl.h>
Index: pvAccessCPP/src/server/baseChannelRequester.h
===================================================================
--- pvAccessCPP/src/server/baseChannelRequester.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/server/baseChannelRequester.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -20,6 +20,8 @@
# undef baseChannelRequesterEpicsExportSharedSymbols
#endif
+#include <shareLib.h>
+
#include <pv/serverContext.h>
#include <pv/serverChannelImpl.h>
Index: pvAccessCPP/src/server/responseHandlers.cpp
===================================================================
--- pvAccessCPP/src/server/responseHandlers.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/server/responseHandlers.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -17,6 +17,11 @@
#include <time.h>
#include <stdlib.h>
+#include <osiSock.h>
+#include <osiProcess.h>
+
+#define epicsExportSharedSymbols
+
#include <pv/responseHandlers.h>
#include <pv/remote.h>
#include <pv/hexDump.h>
@@ -25,8 +30,6 @@
#include <pv/byteBuffer.h>
-#include <osiSock.h>
-#include <osiProcess.h>
#include <pv/logger.h>
#include <pv/pvAccessMB.h>
Index: pvAccessCPP/src/server/beaconEmitter.cpp
===================================================================
--- pvAccessCPP/src/server/beaconEmitter.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/server/beaconEmitter.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -8,12 +8,13 @@
#define NOMINMAX
#endif
+#include <algorithm>
+
+#define epicsExportSharedSymbols
+
#include <pv/beaconEmitter.h>
#include <pv/serializationHelper.h>
-
#include <pv/logger.h>
-#include <algorithm>
-
#include <pv/serverContext.h>
using namespace std;
Index: pvAccessCPP/src/server/baseChannelRequester.cpp
===================================================================
--- pvAccessCPP/src/server/baseChannelRequester.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/server/baseChannelRequester.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -4,6 +4,8 @@
* in file LICENSE that is included with this distribution.
*/
+#define epicsExportSharedSymbols
+
#include <pv/baseChannelRequester.h>
using namespace epics::pvData;
Index: pvAccessCPP/src/server/responseHandlers.h
===================================================================
--- pvAccessCPP/src/server/responseHandlers.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/server/responseHandlers.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -19,6 +19,8 @@
# undef responseHandlersEpicsExportSharedSymbols
#endif
+#include <shareLib.h>
+
#include <pv/serverContext.h>
#include <pv/remote.h>
#include <pv/serverChannelImpl.h>
Index: pvAccessCPP/src/remoteClient/clientContextImpl.h
===================================================================
--- pvAccessCPP/src/remoteClient/clientContextImpl.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remoteClient/clientContextImpl.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -19,12 +19,13 @@
# undef clientContextImplEpicsExportSharedSymbols
#endif
+#include <shareLib.h>
+
#include <pv/pvAccess.h>
#include <pv/remote.h>
#include <pv/channelSearchManager.h>
#include <pv/inetAddressUtil.h>
-#include <shareLib.h>
class ChannelSearchManager;
Index: pvAccessCPP/src/remoteClient/clientContextImpl.cpp
===================================================================
--- pvAccessCPP/src/remoteClient/clientContextImpl.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remoteClient/clientContextImpl.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -13,22 +13,23 @@
#include <pv/lock.h>
#include <pv/timer.h>
#include <pv/bitSetUtil.h>
-#include <pv/serializationHelper.h>
#include <pv/convert.h>
#include <pv/queue.h>
#include <pv/standardPVField.h>
+#define epicsExportSharedSymbols
+
#include <pv/pvAccess.h>
#include <pv/pvaConstants.h>
#include <pv/blockingUDP.h>
#include <pv/blockingTCP.h>
#include <pv/namedLockPattern.h>
+#include <pv/serializationHelper.h>
#include <pv/inetAddressUtil.h>
#include <pv/hexDump.h>
#include <pv/remote.h>
#include <pv/channelSearchManager.h>
#include <pv/simpleChannelSearchManagerImpl.h>
-#include <pv/clientContextImpl.h>
#include <pv/configuration.h>
#include <pv/beaconHandler.h>
#include <pv/logger.h>
@@ -36,6 +37,8 @@
#include <pv/pvAccessMB.h>
+#include <pv/clientContextImpl.h>
+
//#include <tr1/unordered_map>
using std::tr1::dynamic_pointer_cast;
Index: pvAccessCPP/src/remote/blockingTCPConnector.cpp
===================================================================
--- pvAccessCPP/src/remote/blockingTCPConnector.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/blockingTCPConnector.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -4,6 +4,13 @@
* in file LICENSE that is included with this distribution.
*/
+#include <sys/types.h>
+#include <sstream>
+
+#include <epicsThread.h>
+#include <osiSock.h>
+
+#define epicsExportSharedSymbols
#include <pv/blockingTCP.h>
#include <pv/remote.h>
#include <pv/namedLockPattern.h>
@@ -10,12 +17,7 @@
#include <pv/logger.h>
#include <pv/codec.h>
-#include <epicsThread.h>
-#include <osiSock.h>
-#include <sys/types.h>
-#include <sstream>
-
using namespace epics::pvData;
namespace epics {
Index: pvAccessCPP/src/remote/blockingUDPConnector.cpp
===================================================================
--- pvAccessCPP/src/remote/blockingUDPConnector.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/blockingUDPConnector.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -4,14 +4,16 @@
* in file LICENSE that is included with this distribution.
*/
+#include <sys/types.h>
+
+#include <osiSock.h>
+
+#define epicsExportSharedSymbols
#include <pv/blockingUDP.h>
#include <pv/remote.h>
#include <pv/logger.h>
-#include <osiSock.h>
-#include <sys/types.h>
-
using namespace std;
using namespace epics::pvData;
Index: pvAccessCPP/src/remote/blockingUDPTransport.cpp
===================================================================
--- pvAccessCPP/src/remote/blockingUDPTransport.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/blockingUDPTransport.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -9,6 +9,7 @@
#include <Ws2tcpip.h>
#endif
+#define epicsExportSharedSymbols
#include <pv/blockingUDP.h>
#include <pv/pvaConstants.h>
#include <pv/inetAddressUtil.h>
Index: pvAccessCPP/src/remote/blockingTCPAcceptor.cpp
===================================================================
--- pvAccessCPP/src/remote/blockingTCPAcceptor.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/blockingTCPAcceptor.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -4,6 +4,12 @@
* in file LICENSE that is included with this distribution.
*/
+#include <sstream>
+
+#include <osiSock.h>
+#include <epicsThread.h>
+
+#define epicsExportSharedSymbols
#include <pv/blockingTCP.h>
#include "codec.h"
#include <pv/remote.h>
@@ -11,11 +17,7 @@
#include <pv/epicsException.h>
-#include <osiSock.h>
-#include <epicsThread.h>
-#include <sstream>
-
using std::ostringstream;
using namespace epics::pvData;
Index: pvAccessCPP/src/remote/abstractResponseHandler.cpp
===================================================================
--- pvAccessCPP/src/remote/abstractResponseHandler.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/abstractResponseHandler.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -4,15 +4,17 @@
* in file LICENSE that is included with this distribution.
*/
+#include <sstream>
+
+#include <osiSock.h>
+
+#define epicsExportSharedSymbols
#include <pv/remote.h>
#include <pv/hexDump.h>
#include <pv/byteBuffer.h>
-#include <osiSock.h>
-#include <sstream>
-
using std::ostringstream;
using std::hex;
Index: pvAccessCPP/src/remote/codec.h
===================================================================
--- pvAccessCPP/src/remote/codec.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/codec.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -22,6 +22,14 @@
#include <epicsTime.h>
#include <epicsThread.h>
+
+#ifdef abstractCodecEpicsExportSharedSymbols
+# define epicsExportSharedSymbols
+# undef abstractCodecEpicsExportSharedSymbols
+#endif
+
+#include <shareLib.h>
+
#include <pv/byteBuffer.h>
#include <pv/pvType.h>
#include <pv/lock.h>
@@ -29,10 +37,6 @@
#include <pv/event.h>
#include <pv/likely.h>
-#ifdef abstractCodecEpicsExportSharedSymbols
-# define epicsExportSharedSymbols
-# undef abstractCodecEpicsExportSharedSymbols
-#endif
#include <pv/pvaConstants.h>
#include <pv/remote.h>
@@ -42,7 +46,6 @@
#include <pv/namedLockPattern.h>
#include <pv/inetAddressUtil.h>
-#include <shareLib.h>
namespace epics {
namespace pvAccess {
@@ -420,7 +423,7 @@
};
- class BlockingTCPTransportCodec :
+ class epicsShareClass BlockingTCPTransportCodec :
public BlockingSocketAbstractCodec,
public SecurityPluginControl
Index: pvAccessCPP/src/remote/serializationHelper.h
===================================================================
--- pvAccessCPP/src/remote/serializationHelper.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/serializationHelper.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -24,6 +24,8 @@
# undef serializationHelperEpicsExportSharedSymbols
#endif
+#include <shareLib.h>
+
#include <pv/pvaConstants.h>
#include <pv/pvAccess.h>
Index: pvAccessCPP/src/remote/simpleChannelSearchManagerImpl.cpp
===================================================================
--- pvAccessCPP/src/remote/simpleChannelSearchManagerImpl.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/simpleChannelSearchManagerImpl.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -4,16 +4,19 @@
* in file LICENSE that is included with this distribution.
*/
+#include <stdlib.h>
+#include <time.h>
+#include <vector>
+
+#include <pv/timeStamp.h>
+
+#define epicsExportSharedSymbols
+
#include <pv/simpleChannelSearchManagerImpl.h>
#include <pv/pvaConstants.h>
#include <pv/blockingUDP.h>
#include <pv/serializeHelper.h>
-#include <stdlib.h>
-#include <time.h>
-#include <pv/timeStamp.h>
-#include <vector>
-
using namespace std;
using namespace epics::pvData;
Index: pvAccessCPP/src/remote/simpleChannelSearchManagerImpl.h
===================================================================
--- pvAccessCPP/src/remote/simpleChannelSearchManagerImpl.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/simpleChannelSearchManagerImpl.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -21,6 +21,8 @@
# undef simpleChannelSearchManagerEpicsExportSharedSymbols
#endif
+#include <shareLib.h>
+
#include <pv/channelSearchManager.h>
namespace epics {
Index: pvAccessCPP/src/remote/transportRegistry.h
===================================================================
--- pvAccessCPP/src/remote/transportRegistry.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/transportRegistry.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -21,8 +21,6 @@
#include <pv/lock.h>
#include <pv/pvType.h>
#include <pv/epicsException.h>
-#include <pv/remote.h>
-#include <pv/inetAddressUtil.h>
#include <pv/sharedPtr.h>
#ifdef transportRegistryEpicsExportSharedSymbols
@@ -30,6 +28,11 @@
# undef transportRegistryEpicsExportSharedSymbols
#endif
+#include <shareLib.h>
+
+#include <pv/remote.h>
+#include <pv/inetAddressUtil.h>
+
namespace epics {
namespace pvAccess {
Index: pvAccessCPP/src/remote/remote.h
===================================================================
--- pvAccessCPP/src/remote/remote.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/remote.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -30,6 +30,8 @@
# undef remoteEpicsExportSharedSymbols
#endif
+#include <shareLib.h>
+
#include <pv/pvaConstants.h>
#include <pv/configuration.h>
@@ -125,7 +127,7 @@
/**
* Interface defining transport send control.
*/
- class TransportSendControl : public epics::pvData::SerializableControl {
+ class epicsShareClass TransportSendControl : public epics::pvData::SerializableControl {
public:
POINTER_DEFINITIONS(TransportSendControl);
@@ -142,7 +144,7 @@
/**
* Interface defining transport sender (instance sending data over transport).
*/
- class TransportSender : public Lockable {
+ class epicsShareClass TransportSender : public Lockable {
public:
POINTER_DEFINITIONS(TransportSender);
@@ -165,7 +167,7 @@
/**
* Interface defining transport (connection).
*/
- class Transport : public epics::pvData::DeserializableControl {
+ class epicsShareClass Transport : public epics::pvData::DeserializableControl {
public:
POINTER_DEFINITIONS(Transport);
@@ -314,7 +316,7 @@
/**
* Not public IF, used by Transports, etc.
*/
- class Context {
+ class epicsShareClass Context {
public:
POINTER_DEFINITIONS(Context);
@@ -483,7 +485,7 @@
/**
* Interface defining a transport that hosts server channels.
*/
- class ChannelHostingTransport {
+ class epicsShareClass ChannelHostingTransport {
public:
POINTER_DEFINITIONS(ChannelHostingTransport);
Index: pvAccessCPP/src/remote/blockingTCP.h
===================================================================
--- pvAccessCPP/src/remote/blockingTCP.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/blockingTCP.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -33,6 +33,8 @@
# undef blockingTCPEpicsExportSharedSymbols
#endif
+#include <shareLib.h>
+
#include <pv/pvaConstants.h>
#include <pv/remote.h>
#include <pv/transportRegistry.h>
@@ -97,7 +99,7 @@
};
- class ResponseHandlerFactory
+ class epicsShareClass ResponseHandlerFactory
{
public:
POINTER_DEFINITIONS(ResponseHandlerFactory);
Index: pvAccessCPP/src/remote/blockingUDP.h
===================================================================
--- pvAccessCPP/src/remote/blockingUDP.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvAccessCPP/src/remote/blockingUDP.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -28,6 +28,8 @@
# undef blockingUDPEpicsExportSharedSymbols
#endif
+#include <shareLib.h>
+
#include <pv/remote.h>
#include <pv/pvaConstants.h>
#include <pv/inetAddressUtil.h>
Index: pvDatabaseCPP/test/src/testPVCopy.cpp
===================================================================
--- pvDatabaseCPP/test/src/testPVCopy.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/test/src/testPVCopy.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -25,6 +25,8 @@
#include <pv/standardField.h>
#include <pv/standardPVField.h>
+
+#define epicsExportSharedSymbols
#include <pv/channelProviderLocal.h>
#include "powerSupply.h"
Index: pvDatabaseCPP/test/src/testPVRecord.cpp
===================================================================
--- pvDatabaseCPP/test/src/testPVRecord.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/test/src/testPVRecord.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -27,6 +27,9 @@
#include <pv/standardPVField.h>
#include <pv/pvData.h>
#include <pv/pvCopy.h>
+
+#define epicsExportSharedSymbols
+
#include "powerSupply.h"
Index: pvDatabaseCPP/test/src/testExampleRecord.cpp
===================================================================
--- pvDatabaseCPP/test/src/testExampleRecord.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/test/src/testExampleRecord.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -27,10 +27,11 @@
#include <pv/standardPVField.h>
#include <pv/pvData.h>
#include <pv/pvAccess.h>
-#include "powerSupply.h"
#include <epicsExport.h>
+#include "powerSupply.h"
+
using namespace std;
using std::tr1::static_pointer_cast;
using namespace epics::pvData;
Index: pvDatabaseCPP/test/src/powerSupply.h
===================================================================
--- pvDatabaseCPP/test/src/powerSupply.h (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/test/src/powerSupply.h (.../EPICS-CPP-4_4_0) (working copy)
@@ -21,7 +21,6 @@
#include <pv/alarm.h>
#include <pv/pvTimeStamp.h>
#include <pv/pvAlarm.h>
-#include <pv/pvDatabase.h>
#ifdef powerSupplyEpicsExportSharedSymbols
# define epicsExportSharedSymbols
@@ -30,6 +29,7 @@
#include <shareLib.h>
+#include <pv/pvDatabase.h>
namespace epics { namespace pvDatabase {
Index: pvDatabaseCPP/exampleDatabase/src/exampleDatabase.cpp
===================================================================
--- pvDatabaseCPP/exampleDatabase/src/exampleDatabase.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/exampleDatabase/src/exampleDatabase.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -22,6 +22,9 @@
#include <pv/standardField.h>
#include <pv/standardPVField.h>
+
+#define epicsExportSharedSymbols
+
#include <pv/channelProviderLocal.h>
#include <pv/recordList.h>
#include <pv/traceRecord.h>
@@ -28,7 +31,6 @@
#include <pv/powerSupply.h>
-#define epicsExportSharedSymbols
#include <pv/exampleDatabase.h>
using namespace std;
Index: pvDatabaseCPP/exampleDatabase/src/exampleDatabaseMain.cpp
===================================================================
--- pvDatabaseCPP/exampleDatabase/src/exampleDatabaseMain.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/exampleDatabase/src/exampleDatabaseMain.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -19,9 +19,11 @@
#include <vector>
#include <iostream>
-#include <pv/channelProviderLocal.h>
#include <pv/serverContext.h>
+#include <epicsExport.h>
+
+#include <pv/channelProviderLocal.h>
#include <pv/exampleDatabase.h>
#include <pv/exampleMonitorPlugin.h>
Index: pvDatabaseCPP/exampleServer/src/exampleServerMain.cpp
===================================================================
--- pvDatabaseCPP/exampleServer/src/exampleServerMain.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/exampleServer/src/exampleServerMain.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -21,10 +21,12 @@
#include <pv/standardField.h>
#include <pv/standardPVField.h>
#include <pv/exampleServer.h>
+#include <pv/serverContext.h>
+
+#include <epicsExport.h>
#include <pv/traceRecord.h>
#include <pv/recordList.h>
#include <pv/channelProviderLocal.h>
-#include <pv/serverContext.h>
using namespace std;
using std::tr1::static_pointer_cast;
Index: pvDatabaseCPP/examplePowerSupply/src/Makefile
===================================================================
--- pvDatabaseCPP/examplePowerSupply/src/Makefile (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/examplePowerSupply/src/Makefile (.../EPICS-CPP-4_4_0) (working copy)
@@ -13,11 +13,11 @@
PROD_HOST += powerSupplyMain
powerSupplyMain_SRCS += powerSupplyMain.cpp
+powerSupplyMain_LIBS += powerSupply
powerSupplyMain_LIBS += pvDatabase
powerSupplyMain_LIBS += pvAccess
powerSupplyMain_LIBS += pvData
powerSupplyMain_LIBS += Com
-powerSupplyMain_LIBS += powerSupply
#===========================
Index: pvDatabaseCPP/examplePowerSupply/src/powerSupplyMain.cpp
===================================================================
--- pvDatabaseCPP/examplePowerSupply/src/powerSupplyMain.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/examplePowerSupply/src/powerSupplyMain.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -21,10 +21,13 @@
#include <pv/standardField.h>
#include <pv/standardPVField.h>
#include <pv/recordList.h>
+#include <pv/serverContext.h>
+
+#include <epicsExport.h>
+
#include <pv/powerSupply.h>
#include <pv/traceRecord.h>
#include <pv/channelProviderLocal.h>
-#include <pv/serverContext.h>
using namespace std;
using std::tr1::static_pointer_cast;
Index: pvDatabaseCPP/src/pvAccess/registerChannelProviderLocal.cpp
===================================================================
--- pvDatabaseCPP/src/pvAccess/registerChannelProviderLocal.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/src/pvAccess/registerChannelProviderLocal.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -44,7 +44,7 @@
static const iocshFuncDef pvdblFuncDef = {
"pvdbl", 0, 0
};
-extern "C" void epicsShareAPI pvdbl(const iocshArgBuf *args)
+extern "C" void pvdbl(const iocshArgBuf *args)
{
PVDatabasePtr master = PVDatabase::getMaster();
PVStringArrayPtr pvNames = master->getRecordNames();
Index: pvDatabaseCPP/arrayPerformance/src/arrayPerformanceMain.cpp
===================================================================
--- pvDatabaseCPP/arrayPerformance/src/arrayPerformanceMain.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/arrayPerformance/src/arrayPerformanceMain.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -22,11 +22,13 @@
#include <pv/standardField.h>
#include <pv/standardPVField.h>
-#include <pv/traceRecord.h>
-#include <pv/channelProviderLocal.h>
#include <pv/serverContext.h>
#include <pv/clientFactory.h>
+#include <epicsExport.h>
+
+#include <pv/traceRecord.h>
+#include <pv/channelProviderLocal.h>
#include <arrayPerformance.h>
#include <longArrayMonitor.h>
Index: pvDatabaseCPP/arrayPerformance/src/longArrayMonitorMain.cpp
===================================================================
--- pvDatabaseCPP/arrayPerformance/src/longArrayMonitorMain.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/arrayPerformance/src/longArrayMonitorMain.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -22,11 +22,13 @@
#include <pv/standardField.h>
#include <pv/standardPVField.h>
-#include <pv/traceRecord.h>
-#include <pv/channelProviderLocal.h>
#include <pv/serverContext.h>
#include <pv/clientFactory.h>
+#include <epicsExport.h>
+
+#include <pv/traceRecord.h>
+#include <pv/channelProviderLocal.h>
#include <arrayPerformance.h>
#include <longArrayMonitor.h>
Index: pvDatabaseCPP/arrayPerformance/src/Makefile
===================================================================
--- pvDatabaseCPP/arrayPerformance/src/Makefile (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/arrayPerformance/src/Makefile (.../EPICS-CPP-4_4_0) (working copy)
@@ -17,28 +17,28 @@
PROD_HOST += arrayPerformanceMain
arrayPerformanceMain_SRCS += arrayPerformanceMain.cpp
+arrayPerformanceMain_LIBS += pvDatabaseExample
arrayPerformanceMain_LIBS += pvDatabase pvAccess pvData Com
-arrayPerformanceMain_LIBS += pvDatabaseExample
PROD_HOST += longArrayMonitorMain
longArrayMonitorMain_SRCS += longArrayMonitorMain.cpp
+longArrayMonitorMain_LIBS += pvDatabaseExample
longArrayMonitorMain_LIBS += pvDatabase pvAccess pvData Com
-longArrayMonitorMain_LIBS += pvDatabaseExample
PROD_HOST += longArrayGetMain
longArrayGetMain_SRCS += longArrayGetMain.cpp
+longArrayGetMain_LIBS += pvDatabaseExample
longArrayGetMain_LIBS += pvDatabase pvAccess pvData Com
-longArrayGetMain_LIBS += pvDatabaseExample
PROD_HOST += longArrayPutMain
longArrayPutMain_SRCS += longArrayPutMain.cpp
+longArrayPutMain_LIBS += pvDatabaseExample
longArrayPutMain_LIBS += pvDatabase pvAccess pvData Com
-longArrayPutMain_LIBS += pvDatabaseExample
PROD_HOST += vectorPerformanceMain
vectorPerformanceMain_SRCS += vectorPerformanceMain.cpp
+vectorPerformanceMain_LIBS += pvDatabaseExample
vectorPerformanceMain_LIBS += pvDatabase pvAccess pvData Com
-vectorPerformanceMain_LIBS += pvDatabaseExample
include $(TOP)/configure/RULES
Index: pvDatabaseCPP/arrayPerformance/src/longArrayPutMain.cpp
===================================================================
--- pvDatabaseCPP/arrayPerformance/src/longArrayPutMain.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/arrayPerformance/src/longArrayPutMain.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -22,11 +22,13 @@
#include <pv/standardField.h>
#include <pv/standardPVField.h>
-#include <pv/traceRecord.h>
-#include <pv/channelProviderLocal.h>
#include <pv/serverContext.h>
#include <pv/clientFactory.h>
+#include <epicsExport.h>
+
+#include <pv/traceRecord.h>
+#include <pv/channelProviderLocal.h>
#include <arrayPerformance.h>
#include <longArrayPut.h>
Index: pvDatabaseCPP/arrayPerformance/src/longArrayGetMain.cpp
===================================================================
--- pvDatabaseCPP/arrayPerformance/src/longArrayGetMain.cpp (.../EPICS-CPP-4.4.0) (revision 2419)
+++ pvDatabaseCPP/arrayPerformance/src/longArrayGetMain.cpp (.../EPICS-CPP-4_4_0) (working copy)
@@ -22,11 +22,13 @@
#include <pv/standardField.h>
#include <pv/standardPVField.h>
-#include <pv/traceRecord.h>
-#include <pv/channelProviderLocal.h>
#include <pv/serverContext.h>
#include <pv/clientFactory.h>
+#include <epicsExport.h>
+
+#include <pv/traceRecord.h>
+#include <pv/channelProviderLocal.h>
#include <arrayPerformance.h>
#include <longArrayGet.h>
Index: exampleCPP/HelloWorld/helloClientRunner
===================================================================
--- exampleCPP/HelloWorld/helloClientRunner (.../EPICS-CPP-4.4.0) (revision 2419)
+++ exampleCPP/HelloWorld/helloClientRunner (.../EPICS-CPP-4_4_0) (working copy)
@@ -31,4 +31,7 @@
TOP=$(dirname $0)
+# On Cygwin we need DLL directories in PATH
+export PATH=$TOP/bin/$EPICS_HOST_ARCH:$TOP/../../pvAccessCPP/bin/$EPICS_HOST_ARCH:$TOP/../../pvDataCPP/bin/$EPICS_HOST_ARCH:$PATH
+
$TOP/bin/$EPICS_HOST_ARCH/HelloClient ${1:-Dave}
Index: exampleCPP/HelloWorld/helloServerRunner
===================================================================
--- exampleCPP/HelloWorld/helloServerRunner (.../EPICS-CPP-4.4.0) (revision 2419)
+++ exampleCPP/HelloWorld/helloServerRunner (.../EPICS-CPP-4_4_0) (working copy)
@@ -22,5 +22,7 @@
TOP=$(dirname $0)
+# On Cygwin we need DLL directories in PATH
+export PATH=$TOP/bin/$EPICS_HOST_ARCH:$TOP/../../pvAccessCPP/bin/$EPICS_HOST_ARCH:$TOP/../../pvDataCPP/bin/$EPICS_HOST_ARCH:$PATH
+
$TOP/bin/$EPICS_HOST_ARCH/HelloService
-
Index: exampleCPP/HelloWorld/helloClientRunner.bat
===================================================================
--- exampleCPP/HelloWorld/helloClientRunner.bat (.../EPICS-CPP-4.4.0) (revision 0)
+++ exampleCPP/HelloWorld/helloClientRunner.bat (.../EPICS-CPP-4_4_0) (revision 2453)
@@ -0,0 +1,38 @@
+@echo OFF
+REM
+REM Copyright: See the COPYRIGHT that is included with this distribution.
+REM EPICS exampleCPP is distributed subject to a Software License
+REM Agreement found in file LICENSE that is included with this
+REM distribution.
+REM
+REM Abs: helloClientRunner executes the helloWorldClient EV4 client.
+REM
+REM Rem: helloWorldClient is a simple example of an E4C client demonstrating support
+REM for a client/server environment in EPICS V4.
+REM
+REM helloWorldClient passes the argument it was given to the helloServer,
+REM which constructs and returns a simple greeting. The helloClient receives
+REM the greeting, and prints it.
+REM
+REM Usage: Execute helloClientRunner any time while helloServerRunner is running.
+REM
+REM > ./helloClientRunner [optional name, if not supplied, "Dave" is used].
+REM
+REM E.g.:
+REM bash-3.2$ ./helloClientRunner julie
+REM Hello julie
+REM
+REM Ref:
+REM ----------------------------------------------------------------------------
+REM Auth: 17-Jan-2013, Dave Hickin ([email protected])
+REM
+REM ============================================================================
+
+set TOP=%~dp0
+set PATH=%TOP%bin\%EPICS_HOST_ARCH%;%TOP%..\..\pvAccessCPP\bin\%EPICS_HOST_ARCH%;%TOP%..\..\pvDataCPP\bin\%EPICS_HOST_ARCH%;%PATH%
+if "%1" == "" (
+ set ARG=Dave
+) else (
+ set ARG=%1
+)
+"%TOP%bin\%EPICS_HOST_ARCH%\HelloClient.exe" %ARG%
Index: exampleCPP/HelloWorld/helloServerRunner.bat
===================================================================
--- exampleCPP/HelloWorld/helloServerRunner.bat (.../EPICS-CPP-4.4.0) (revision 0)
+++ exampleCPP/HelloWorld/helloServerRunner.bat (.../EPICS-CPP-4_4_0) (revision 2453)
@@ -0,0 +1,24 @@
+@echo OFF
+REM
+REM Copyright: See the COPYRIGHT that is included with this distribution.
+REM EPICS exampleCPP is distributed subject to a Software License
+REM Agreement found in file LICENSE that is included with this
+REM distribution.
+REM
+REM Abs: start_server starts the channel archiver service, which can query a
+REM Channel Archiver index file, with a given service name
+REM
+REM Rem: The Channel Archiver Service is an example of an EPICS v4 RPC service.
+REM
+REM
+REM Usage: Execute helloServerRunner prior to executing helloClientRunner.
+REM
+REM > ./helloServerRunner
+REM
+REM ----------------------------------------------------------------------------
+REM Auth: 17-Jan-2013, Dave Hickin ([email protected])
+REM ============================================================================
+
+set TOP=%~dp0
+set PATH=%TOP%bin\%EPICS_HOST_ARCH%;%TOP%..\..\pvAccessCPP\bin\%EPICS_HOST_ARCH%;%TOP%..\..\pvDataCPP\bin\%EPICS_HOST_ARCH%;%PATH%
+"%TOP%bin\%EPICS_HOST_ARCH%\HelloService.exe"
- Navigate by Date:
- Prev:
Accessing RPC result by CSS Andreas Frei
- Next:
Re: exit puzzle about SNL's example Benjamin Franksen
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
<2015>
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
Accessing RPC result by CSS Andreas Frei
- Next:
Looking for MRF PCIE-EVR-300 driver on linux Xu, Shifu
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
<2015>
2016
2017
2018
2019
2020
2021
2022
2023
2024