EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  <20192020  2021  2022  2023  2024  Index 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  <20192020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: [Merge] ~epics-core/epics-base/+git/Com:libcom-api into epics-base:7.0
From: mdavidsaver via Core-talk <[email protected]>
To: [email protected]
Date: Mon, 25 Nov 2019 05:30:42 -0000
mdavidsaver has proposed merging ~epics-core/epics-base/+git/Com:libcom-api into epics-base:7.0.

Requested reviews:
  EPICS Core Developers (epics-core)

For more details, see:
https://code.launchpad.net/~epics-core/epics-base/+git/Com/+merge/375942

After another frustrating iteration of dllimport/export hell, I decided to see what was entailed in replacing use of shareLib.h in libCom (only).  This large, but highly mechanical, change set is the result.  (done with 'sed')

Adds libComAPI.h which defines LIBCOM_API and LIBCOMSTD_API.  Use of the macro epicsExportSharedSymbols is replaced by LIBCOM_API_BUILDING.

Complicates encountered:

1. Defining LIBCOM_API_BUILDING at the directory level necessitates special handling of epicsTempFile.cpp (now compiled twice) and iocLogServer.  This could be avoided by doing the executable builds in separate directories.

2. libComAPI.h still includes shareLib.h due to the unfortunate example in shareLib.h for working around ordering problems by un/re-defining epicsExportSharedSymbols.  All code using this pattern breaks unless every Base header includes shareLib.h :(  The fix is trivial, but too widespread and otherwise inconsequential to force a break now.

The end result is that no downstream/user changes are needed.  I did however, go ahead and remove the now unnecessary un/re-define games from the libca headers.
-- 
Your team EPICS Core Developers is requested to review the proposed merge of ~epics-core/epics-base/+git/Com:libcom-api into epics-base:7.0.
diff --git a/modules/ca/src/client/bhe.h b/modules/ca/src/client/bhe.h
index 4da9520..0534637 100644
--- a/modules/ca/src/client/bhe.h
+++ b/modules/ca/src/client/bhe.h
@@ -22,20 +22,12 @@
 #ifndef bheh
 #define bheh
 
-#ifdef epicsExportSharedSymbols
-#   define bhehEpicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "tsDLList.h"
 #include "tsFreeList.h"
 #include "epicsTime.h"
 #include "compilerDependencies.h"
 
-#ifdef bhehEpicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 #include "inetAddrID.h"
 #include "caProto.h"
diff --git a/modules/ca/src/client/cac.h b/modules/ca/src/client/cac.h
index 7db5c6d..6134628 100644
--- a/modules/ca/src/client/cac.h
+++ b/modules/ca/src/client/cac.h
@@ -22,11 +22,6 @@
 #ifndef cach
 #define cach
 
-#ifdef epicsExportSharedSymbols
-#   define cach_restore_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "compilerDependencies.h"
 #include "ipAddrToAsciiAsynchronous.h"
 #include "msgForMultiplyDefinedPV.h"
@@ -35,10 +30,7 @@
 #include "freeList.h"
 #include "localHostName.h"
 
-#ifdef cach_restore_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 #include "nciu.h"
 #include "comBuf.h"
diff --git a/modules/ca/src/client/cacIO.h b/modules/ca/src/client/cacIO.h
index 4e8af4a..e512731 100644
--- a/modules/ca/src/client/cacIO.h
+++ b/modules/ca/src/client/cacIO.h
@@ -47,20 +47,12 @@
 #include <new>
 #include <stdarg.h>
 
-#ifdef epicsExportSharedSymbols
-#   define cacIOh_restore_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "tsDLList.h"
 #include "epicsMutex.h"
 #include "epicsGuard.h"
 #include "epicsThread.h"
 
-#ifdef cacIOh_restore_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 
 class cacChannel;
diff --git a/modules/ca/src/client/cadef.h b/modules/ca/src/client/cadef.h
index e62dd72..d51ad5f 100644
--- a/modules/ca/src/client/cadef.h
+++ b/modules/ca/src/client/cadef.h
@@ -32,17 +32,9 @@
 #   include <stdarg.h>
 #endif
 
-#ifdef epicsExportSharedSymbols
-#   define INCLcadefh_accessh_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "epicsThread.h"
 
-#ifdef INCLcadefh_accessh_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 
 #include "caerr.h"
diff --git a/modules/ca/src/client/caerr.h b/modules/ca/src/client/caerr.h
index 5393096..b846583 100644
--- a/modules/ca/src/client/caerr.h
+++ b/modules/ca/src/client/caerr.h
@@ -23,17 +23,9 @@
 #ifndef INCLcaerrh
 #define INCLcaerrh
 
-#ifdef epicsExportSharedSymbols
-#   define INCLcaerrh_accessh_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
-#   include "epicsTypes.h"
+#include "epicsTypes.h"
 
-#ifdef INCLcaerrh_accessh_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 /*  CA Status Code Definitions   */
 
diff --git a/modules/ca/src/client/db_access.h b/modules/ca/src/client/db_access.h
index 92aa5d0..b0318dc 100644
--- a/modules/ca/src/client/db_access.h
+++ b/modules/ca/src/client/db_access.h
@@ -17,18 +17,10 @@
 
 #include <stddef.h>
 
-#ifdef epicsExportSharedSymbols
-#   define INCLdb_accessh_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "epicsTypes.h"
 #include "epicsTime.h"
 
-#ifdef INCLdb_accessh_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 
 #ifdef __cplusplus
diff --git a/modules/ca/src/client/disconnectGovernorTimer.h b/modules/ca/src/client/disconnectGovernorTimer.h
index f636d62..1b83b39 100644
--- a/modules/ca/src/client/disconnectGovernorTimer.h
+++ b/modules/ca/src/client/disconnectGovernorTimer.h
@@ -26,19 +26,11 @@
 #ifndef disconnectGovernorTimerh  
 #define disconnectGovernorTimerh
 
-#ifdef epicsExportSharedSymbols
-#   define searchTimerh_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "epicsMutex.h"
 #include "epicsGuard.h"
 #include "epicsTimer.h"
 
-#ifdef searchTimerh_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 #include "caProto.h"
 #include "netiiu.h"
diff --git a/modules/ca/src/client/nciu.h b/modules/ca/src/client/nciu.h
index 7cba6e8..2e8231e 100644
--- a/modules/ca/src/client/nciu.h
+++ b/modules/ca/src/client/nciu.h
@@ -25,21 +25,13 @@
 #ifndef nciuh
 #define nciuh
 
-#ifdef epicsExportSharedSymbols
-#   define nciuh_restore_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "resourceLib.h"
 #include "tsDLList.h"
 #include "tsFreeList.h"
 #include "epicsMutex.h"
 #include "compilerDependencies.h"
 
-#ifdef nciuh_restore_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 #define CA_MINOR_PROTOCOL_REVISION 13
 #include "caProto.h"
diff --git a/modules/ca/src/client/oldAccess.h b/modules/ca/src/client/oldAccess.h
index 1337cb3..db54e13 100644
--- a/modules/ca/src/client/oldAccess.h
+++ b/modules/ca/src/client/oldAccess.h
@@ -28,19 +28,11 @@
 
 #include <memory>
 
-#ifdef epicsExportSharedSymbols
-#   define oldAccessh_restore_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "tsFreeList.h"
 #include "compilerDependencies.h"
 #include "osiSock.h"
 
-#ifdef oldAccessh_restore_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 #include "caProto.h"
 #include "cacIO.h"
diff --git a/modules/ca/src/client/repeaterClient.h b/modules/ca/src/client/repeaterClient.h
index faaf080..ff94460 100644
--- a/modules/ca/src/client/repeaterClient.h
+++ b/modules/ca/src/client/repeaterClient.h
@@ -26,19 +26,11 @@
 #ifndef repeaterClienth
 #define repeaterClienth
 
-#ifdef epicsExportSharedSymbols
-#   define repeaterClienth_restore_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "tsDLList.h"
 #include "tsFreeList.h"
 #include "compilerDependencies.h"
 
-#ifdef repeaterClienth_restore_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 union osiSockAddr;
 
diff --git a/modules/ca/src/client/repeaterSubscribeTimer.h b/modules/ca/src/client/repeaterSubscribeTimer.h
index fa47684..713e422 100644
--- a/modules/ca/src/client/repeaterSubscribeTimer.h
+++ b/modules/ca/src/client/repeaterSubscribeTimer.h
@@ -28,17 +28,7 @@
 
 #include "epicsTimer.h"
 
-#ifdef epicsExportSharedSymbols
-#   define repeaterSubscribeTimerh_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
-#include "epicsTimer.h"
-
-#ifdef repeaterSubscribeTimerh_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 class epicsMutex;
 class cacContextNotify;
diff --git a/modules/ca/src/client/searchTimer.h b/modules/ca/src/client/searchTimer.h
index 7b9fe17..95b88b5 100644
--- a/modules/ca/src/client/searchTimer.h
+++ b/modules/ca/src/client/searchTimer.h
@@ -26,19 +26,11 @@
 #ifndef searchTimerh  
 #define searchTimerh
 
-#ifdef epicsExportSharedSymbols
-#   define searchTimerh_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "epicsMutex.h"
 #include "epicsGuard.h"
 #include "epicsTimer.h"
 
-#ifdef searchTimerh_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 #include "caProto.h"
 #include "netiiu.h"
diff --git a/modules/ca/src/client/syncGroup.h b/modules/ca/src/client/syncGroup.h
index 3b9c3cd..5556d88 100644
--- a/modules/ca/src/client/syncGroup.h
+++ b/modules/ca/src/client/syncGroup.h
@@ -25,21 +25,13 @@
 #ifndef syncGrouph
 #define syncGrouph
 
-#ifdef epicsExportSharedSymbols
-#   define syncGrouph_restore_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "tsDLList.h"
 #include "tsFreeList.h"
 #include "resourceLib.h"
 #include "epicsEvent.h"
 #include "compilerDependencies.h"
 
-#ifdef syncGrouph_restore_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 #include "cadef.h"
 #include "cacIO.h"
diff --git a/modules/ca/src/client/tcpRecvWatchdog.h b/modules/ca/src/client/tcpRecvWatchdog.h
index 0b15e22..7e1f20c 100644
--- a/modules/ca/src/client/tcpRecvWatchdog.h
+++ b/modules/ca/src/client/tcpRecvWatchdog.h
@@ -26,17 +26,9 @@
 #ifndef tcpRecvWatchdogh  
 #define tcpRecvWatchdogh
 
-#ifdef epicsExportSharedSymbols
-#   define tcpRecvWatchdogh_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "epicsTimer.h"
 
-#ifdef tcpRecvWatchdogh_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 class tcpiiu;
 
diff --git a/modules/ca/src/client/tcpSendWatchdog.h b/modules/ca/src/client/tcpSendWatchdog.h
index 05a2dfe..edab731 100644
--- a/modules/ca/src/client/tcpSendWatchdog.h
+++ b/modules/ca/src/client/tcpSendWatchdog.h
@@ -27,17 +27,9 @@
 #define tcpSendWatchdogh
 
 
-#ifdef epicsExportSharedSymbols
-#   define tcpSendWatchdogh_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "epicsTimer.h"
 
-#ifdef tcpSendWatchdogh_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 class tcpSendWatchdog : private epicsTimerNotify {
 public:
diff --git a/modules/ca/src/client/udpiiu.h b/modules/ca/src/client/udpiiu.h
index fdf3482..bf7ea10 100644
--- a/modules/ca/src/client/udpiiu.h
+++ b/modules/ca/src/client/udpiiu.h
@@ -27,20 +27,12 @@
 
 #include <memory>
 
-#ifdef epicsExportSharedSymbols
-#   define udpiiuh_accessh_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "osiSock.h"
 #include "epicsThread.h"
 #include "epicsTime.h"
 #include "tsDLList.h"
 
-#ifdef udpiiuh_accessh_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 #include "netiiu.h"
 #include "searchTimer.h"
diff --git a/modules/database/src/ioc/db/dbAccessDefs.h b/modules/database/src/ioc/db/dbAccessDefs.h
index 805dfd4..6f5a4c2 100644
--- a/modules/database/src/ioc/db/dbAccessDefs.h
+++ b/modules/database/src/ioc/db/dbAccessDefs.h
@@ -11,18 +11,10 @@
 #ifndef INCdbAccessDefsh
 #define INCdbAccessDefsh
 
-#ifdef epicsExportSharedSymbols
-#   define INCLdb_accessh_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "epicsTypes.h"
 #include "epicsTime.h"
 
-#ifdef INCLdb_accessh_epicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#   include "shareLib.h"
-#endif
+#include "shareLib.h"
 
 #include "dbBase.h"
 #include "dbAddr.h"
diff --git a/modules/database/src/ioc/db/dbCAC.h b/modules/database/src/ioc/db/dbCAC.h
index 2d97fac..9ead387 100644
--- a/modules/database/src/ioc/db/dbCAC.h
+++ b/modules/database/src/ioc/db/dbCAC.h
@@ -19,11 +19,6 @@
 #ifndef dbCACh
 #define dbCACh
 
-#ifdef epicsExportSharedSymbols
-#   define dbCACh_restore_epicsExportSharedSymbols
-#   undef epicsExportSharedSymbols
-#endif
-
 #include "stdlib.h"
 
 #include <memory> // std::auto_ptr
@@ -31,13 +26,19 @@
 #include "tsDLList.h"
 #include "tsFreeList.h"
 #include "resourceLib.h"
+
+#ifdef epicsExportSharedSymbols
+#   define dbCACh_restore_epicsExportSharedSymbols
+#   undef epicsExportSharedSymbols
+#endif
+
 #include "cacIO.h"
 #include "compilerDependencies.h"
 
 #ifdef dbCACh_restore_epicsExportSharedSymbols
 #   define epicsExportSharedSymbols
-#   include "shareLib.h"
 #endif
+#include "shareLib.h"
 
 #include "db_access.h"
 #include "dbNotify.h"
diff --git a/modules/libcom/src/Makefile b/modules/libcom/src/Makefile
index 57533ba..72ddd42 100644
--- a/modules/libcom/src/Makefile
+++ b/modules/libcom/src/Makefile
@@ -14,10 +14,13 @@ include $(TOP)/configure/CONFIG
 # Uncomment this to remove the (benign) valgrind helper stubs
 #USR_CFLAGS += -DNVALGRIND
 
+USR_CPPFLAGS += -DLIBCOM_API_BUILDING
+
 INC += valgrind/valgrind.h
 
 INC += libComVersion.h
 INC += libComVersionNum.h
+INC += libComAPI.h
 
 include $(LIBCOM)/as/Makefile
 include $(LIBCOM)/bucketLib/Makefile
diff --git a/modules/libcom/src/as/asLib.h b/modules/libcom/src/as/asLib.h
index 528ce6e..d0a89fd 100644
--- a/modules/libcom/src/as/asLib.h
+++ b/modules/libcom/src/as/asLib.h
@@ -12,7 +12,7 @@
 #ifndef INCasLibh
 #define INCasLibh
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "ellLib.h"
 #include "errMdef.h"
 #include "errlog.h"
@@ -24,7 +24,7 @@ extern "C" {
 /* 0 - Use (unverified) client provided host name string.
  * 1 - Use actual client IP address.  HAG() are resolved to IPs at ACF load time.
  */
-epicsShareExtern int asCheckClientIP;
+LIBCOM_API extern int asCheckClientIP;
 
 typedef struct asgMember *ASMEMBERPVT;
 typedef struct asgClient *ASCLIENTPVT;
@@ -67,63 +67,63 @@ void *asTrapWriteBefore(ASCLIENTPVT asClientPvt,
     asTrapWriteWithData(asClientPvt, user, host, addr, 0, 0, NULL)
 
 
-epicsShareFunc long epicsShareAPI asInitialize(ASINPUTFUNCPTR inputfunction);
-epicsShareFunc long epicsShareAPI asInitFile(
+LIBCOM_API long LIBCOMSTD_API asInitialize(ASINPUTFUNCPTR inputfunction);
+LIBCOM_API long LIBCOMSTD_API asInitFile(
     const char *filename,const char *substitutions);
-epicsShareFunc long epicsShareAPI asInitFP(FILE *fp,const char *substitutions);
-epicsShareFunc long epicsShareAPI asInitMem(const char *acf, const char *substitutions);
+LIBCOM_API long LIBCOMSTD_API asInitFP(FILE *fp,const char *substitutions);
+LIBCOM_API long LIBCOMSTD_API asInitMem(const char *acf, const char *substitutions);
 /*caller must provide permanent storage for asgName*/
-epicsShareFunc long epicsShareAPI asAddMember(
+LIBCOM_API long LIBCOMSTD_API asAddMember(
     ASMEMBERPVT *asMemberPvt,const char *asgName);
-epicsShareFunc long epicsShareAPI asRemoveMember(ASMEMBERPVT *asMemberPvt);
+LIBCOM_API long LIBCOMSTD_API asRemoveMember(ASMEMBERPVT *asMemberPvt);
 /*caller must provide permanent storage for newAsgName*/
-epicsShareFunc long epicsShareAPI asChangeGroup(
+LIBCOM_API long LIBCOMSTD_API asChangeGroup(
     ASMEMBERPVT *asMemberPvt,const char *newAsgName);
-epicsShareFunc void * epicsShareAPI asGetMemberPvt(ASMEMBERPVT asMemberPvt);
-epicsShareFunc void epicsShareAPI asPutMemberPvt(
+LIBCOM_API void * LIBCOMSTD_API asGetMemberPvt(ASMEMBERPVT asMemberPvt);
+LIBCOM_API void LIBCOMSTD_API asPutMemberPvt(
     ASMEMBERPVT asMemberPvt,void *userPvt);
 /*client must provide permanent storage for user and host*/
-epicsShareFunc long epicsShareAPI asAddClient(
+LIBCOM_API long LIBCOMSTD_API asAddClient(
     ASCLIENTPVT *asClientPvt,ASMEMBERPVT asMemberPvt,
     int asl,const char *user,char *host);
 /*client must provide permanent storage for user and host*/
-epicsShareFunc long epicsShareAPI asChangeClient(
+LIBCOM_API long LIBCOMSTD_API asChangeClient(
     ASCLIENTPVT asClientPvt,int asl,const char *user,char *host);
-epicsShareFunc long epicsShareAPI asRemoveClient(ASCLIENTPVT *asClientPvt);
-epicsShareFunc void * epicsShareAPI asGetClientPvt(ASCLIENTPVT asClientPvt);
-epicsShareFunc void epicsShareAPI asPutClientPvt(
+LIBCOM_API long LIBCOMSTD_API asRemoveClient(ASCLIENTPVT *asClientPvt);
+LIBCOM_API void * LIBCOMSTD_API asGetClientPvt(ASCLIENTPVT asClientPvt);
+LIBCOM_API void LIBCOMSTD_API asPutClientPvt(
     ASCLIENTPVT asClientPvt,void *userPvt);
-epicsShareFunc long epicsShareAPI asRegisterClientCallback(
+LIBCOM_API long LIBCOMSTD_API asRegisterClientCallback(
     ASCLIENTPVT asClientPvt, ASCLIENTCALLBACK pcallback);
-epicsShareFunc long epicsShareAPI asComputeAllAsg(void);
+LIBCOM_API long LIBCOMSTD_API asComputeAllAsg(void);
 /* following declared below after ASG is declared
-epicsShareFunc long epicsShareAPI asComputeAsg(ASG *pasg);
+LIBCOM_API long LIBCOMSTD_API asComputeAsg(ASG *pasg);
 */
-epicsShareFunc long epicsShareAPI asCompute(ASCLIENTPVT asClientPvt);
-epicsShareFunc int epicsShareAPI asDump(
+LIBCOM_API long LIBCOMSTD_API asCompute(ASCLIENTPVT asClientPvt);
+LIBCOM_API int LIBCOMSTD_API asDump(
     void (*memcallback)(ASMEMBERPVT,FILE *),
     void (*clientcallback)(ASCLIENTPVT,FILE *),int verbose);
-epicsShareFunc int epicsShareAPI asDumpFP(FILE *fp,
+LIBCOM_API int LIBCOMSTD_API asDumpFP(FILE *fp,
     void (*memcallback)(ASMEMBERPVT,FILE *),
     void (*clientcallback)(ASCLIENTPVT,FILE *),int verbose);
-epicsShareFunc int epicsShareAPI asDumpUag(const char *uagname);
-epicsShareFunc int epicsShareAPI asDumpUagFP(FILE *fp,const char *uagname);
-epicsShareFunc int epicsShareAPI asDumpHag(const char *hagname);
-epicsShareFunc int epicsShareAPI asDumpHagFP(FILE *fp,const char *hagname);
-epicsShareFunc int epicsShareAPI asDumpRules(const char *asgname);
-epicsShareFunc int epicsShareAPI asDumpRulesFP(FILE *fp,const char *asgname);
-epicsShareFunc int epicsShareAPI asDumpMem(const char *asgname,
+LIBCOM_API int LIBCOMSTD_API asDumpUag(const char *uagname);
+LIBCOM_API int LIBCOMSTD_API asDumpUagFP(FILE *fp,const char *uagname);
+LIBCOM_API int LIBCOMSTD_API asDumpHag(const char *hagname);
+LIBCOM_API int LIBCOMSTD_API asDumpHagFP(FILE *fp,const char *hagname);
+LIBCOM_API int LIBCOMSTD_API asDumpRules(const char *asgname);
+LIBCOM_API int LIBCOMSTD_API asDumpRulesFP(FILE *fp,const char *asgname);
+LIBCOM_API int LIBCOMSTD_API asDumpMem(const char *asgname,
     void (*memcallback)(ASMEMBERPVT,FILE *),int clients);
-epicsShareFunc int epicsShareAPI asDumpMemFP(FILE *fp,const char *asgname,
+LIBCOM_API int LIBCOMSTD_API asDumpMemFP(FILE *fp,const char *asgname,
     void (*memcallback)(ASMEMBERPVT,FILE *),int clients);
-epicsShareFunc int epicsShareAPI asDumpHash(void);
-epicsShareFunc int epicsShareAPI asDumpHashFP(FILE *fp);
+LIBCOM_API int LIBCOMSTD_API asDumpHash(void);
+LIBCOM_API int LIBCOMSTD_API asDumpHashFP(FILE *fp);
 
-epicsShareFunc void * epicsShareAPI asTrapWriteBeforeWithData(
+LIBCOM_API void * LIBCOMSTD_API asTrapWriteBeforeWithData(
     const char *userid, const char *hostid, void *addr,
     int dbrType, int no_elements, void *data);
 
-epicsShareFunc void epicsShareAPI asTrapWriteAfterWrite(void *pvt);
+LIBCOM_API void LIBCOMSTD_API asTrapWriteAfterWrite(void *pvt);
 
 #define S_asLib_clientsExist 	(M_asLib| 1) /*Client Exists*/
 #define S_asLib_noUag 		(M_asLib| 2) /*User Access Group does not exist*/
@@ -141,7 +141,7 @@ epicsShareFunc void epicsShareAPI asTrapWriteAfterWrite(void *pvt);
 #define S_asLib_noMemory	(M_asLib|14) /*access security: no Memory */
 
 /*Private declarations */
-epicsShareExtern int asActive;
+LIBCOM_API extern int asActive;
 
 /* definition of access rights*/
 typedef enum{asNOACCESS,asREAD,asWRITE} asAccessRights;
@@ -156,7 +156,7 @@ typedef struct asBase{
 	struct gphPvt *phash;
 } ASBASE;
 
-epicsShareExtern volatile ASBASE *pasbase;
+LIBCOM_API extern volatile ASBASE *pasbase;
 
 /*Defs for User Access Groups*/
 typedef struct{
@@ -238,11 +238,11 @@ typedef struct asgClient {
 	int		trapMask;
 } ASGCLIENT;
 
-epicsShareFunc long epicsShareAPI asComputeAsg(ASG *pasg);
+LIBCOM_API long LIBCOMSTD_API asComputeAsg(ASG *pasg);
 /*following is "friend" function*/
-epicsShareFunc void * epicsShareAPI asCalloc(size_t nobj,size_t size);
-epicsShareFunc char * epicsShareAPI asStrdup(unsigned char *str);
-epicsShareFunc void asFreeAll(ASBASE *pasbase);
+LIBCOM_API void * LIBCOMSTD_API asCalloc(size_t nobj,size_t size);
+LIBCOM_API char * LIBCOMSTD_API asStrdup(unsigned char *str);
+LIBCOM_API void asFreeAll(ASBASE *pasbase);
 #ifdef __cplusplus
 }
 #endif
diff --git a/modules/libcom/src/as/asLibRoutines.c b/modules/libcom/src/as/asLibRoutines.c
index e19b639..1f72beb 100644
--- a/modules/libcom/src/as/asLibRoutines.c
+++ b/modules/libcom/src/as/asLibRoutines.c
@@ -14,7 +14,6 @@
 #include <string.h>
 #include <ctype.h>
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 #include "epicsTypes.h"
 #include "epicsStdio.h"
@@ -36,9 +35,9 @@ static epicsMutexId asLock;
 #define UNLOCK epicsMutexUnlock(asLock)
 
 /*following must be global because asCa nneeds it*/
-epicsShareDef ASBASE volatile *pasbase=NULL;
+ASBASE volatile *pasbase=NULL;
 static ASBASE *pasbasenew=NULL;
-epicsShareDef int   asActive = FALSE;
+int   asActive = FALSE;
 
 static void         *freeListPvt = NULL;
 
@@ -82,7 +81,7 @@ static void asInitializeOnce(void *arg)
     osiSockAttach();
     asLock  = epicsMutexMustCreate();
 }
-long epicsShareAPI asInitialize(ASINPUTFUNCPTR inputfunction)
+long LIBCOMSTD_API asInitialize(ASINPUTFUNCPTR inputfunction)
 {
     ASG		*pasg;
     long	status;
@@ -167,7 +166,7 @@ long epicsShareAPI asInitialize(ASINPUTFUNCPTR inputfunction)
     return(0);
 }
 
-long epicsShareAPI asInitFile(const char *filename,const char *substitutions)
+long LIBCOMSTD_API asInitFile(const char *filename,const char *substitutions)
 {
     FILE *fp;
     long status;
@@ -222,7 +221,7 @@ static int myInputFunction(char *buf, int max_size)
     return(n);
 }
 
-long epicsShareAPI asInitFP(FILE *fp,const char *substitutions)
+long LIBCOMSTD_API asInitFP(FILE *fp,const char *substitutions)
 {
     char	buffer[BUF_SIZE];
     char	mac_buffer[BUF_SIZE];
@@ -272,7 +271,7 @@ static int memInputFunction(char *buf, int max_size)
     return ret;
 }
 
-long epicsShareAPI asInitMem(const char *acf, const char *substitutions)
+long LIBCOMSTD_API asInitMem(const char *acf, const char *substitutions)
 {
     long ret = S_asLib_InitFailed;
     if(!acf) return ret;
@@ -284,7 +283,7 @@ long epicsShareAPI asInitMem(const char *acf, const char *substitutions)
     return ret;
 }
 
-long epicsShareAPI asAddMember(ASMEMBERPVT *pasMemberPvt,const char *asgName)
+long LIBCOMSTD_API asAddMember(ASMEMBERPVT *pasMemberPvt,const char *asgName)
 {
     long	status;
 
@@ -295,7 +294,7 @@ long epicsShareAPI asAddMember(ASMEMBERPVT *pasMemberPvt,const char *asgName)
     return(status);
 }
 
-long epicsShareAPI asRemoveMember(ASMEMBERPVT *asMemberPvt)
+long LIBCOMSTD_API asRemoveMember(ASMEMBERPVT *asMemberPvt)
 {
     ASGMEMBER	*pasgmember;
 
@@ -320,7 +319,7 @@ long epicsShareAPI asRemoveMember(ASMEMBERPVT *asMemberPvt)
     return(0);
 }
 
-long epicsShareAPI asChangeGroup(ASMEMBERPVT *asMemberPvt,const char *newAsgName)
+long LIBCOMSTD_API asChangeGroup(ASMEMBERPVT *asMemberPvt,const char *newAsgName)
 {
     ASGMEMBER	*pasgmember;
     long	status;
@@ -341,7 +340,7 @@ long epicsShareAPI asChangeGroup(ASMEMBERPVT *asMemberPvt,const char *newAsgName
     return(status);
 }
 
-void * epicsShareAPI asGetMemberPvt(ASMEMBERPVT asMemberPvt)
+void * LIBCOMSTD_API asGetMemberPvt(ASMEMBERPVT asMemberPvt)
 {
     ASGMEMBER	*pasgmember = asMemberPvt;
 
@@ -350,7 +349,7 @@ void * epicsShareAPI asGetMemberPvt(ASMEMBERPVT asMemberPvt)
     return(pasgmember->userPvt);
 }
 
-void epicsShareAPI asPutMemberPvt(ASMEMBERPVT asMemberPvt,void *userPvt)
+void LIBCOMSTD_API asPutMemberPvt(ASMEMBERPVT asMemberPvt,void *userPvt)
 {
     ASGMEMBER	*pasgmember = asMemberPvt;
 
@@ -360,7 +359,7 @@ void epicsShareAPI asPutMemberPvt(ASMEMBERPVT asMemberPvt,void *userPvt)
     return;
 }
 
-long epicsShareAPI asAddClient(ASCLIENTPVT *pasClientPvt,ASMEMBERPVT asMemberPvt,
+long LIBCOMSTD_API asAddClient(ASCLIENTPVT *pasClientPvt,ASMEMBERPVT asMemberPvt,
 	int asl,const char *user,char *host)
 {
     ASGMEMBER	*pasgmember = asMemberPvt;
@@ -388,7 +387,7 @@ long epicsShareAPI asAddClient(ASCLIENTPVT *pasClientPvt,ASMEMBERPVT asMemberPvt
     return(status);
 }
 
-long epicsShareAPI asChangeClient(
+long LIBCOMSTD_API asChangeClient(
     ASCLIENTPVT asClientPvt,int asl,const char *user,char *host)
 {
     ASGCLIENT	*pasgclient = asClientPvt;
@@ -410,7 +409,7 @@ long epicsShareAPI asChangeClient(
     return(status);
 }
 
-long epicsShareAPI asRemoveClient(ASCLIENTPVT *asClientPvt)
+long LIBCOMSTD_API asRemoveClient(ASCLIENTPVT *asClientPvt)
 {
     ASGCLIENT	*pasgclient = *asClientPvt;
     ASGMEMBER	*pasgMember;
@@ -431,7 +430,7 @@ long epicsShareAPI asRemoveClient(ASCLIENTPVT *asClientPvt)
     return(0);
 }
 
-long epicsShareAPI asRegisterClientCallback(ASCLIENTPVT asClientPvt,
+long LIBCOMSTD_API asRegisterClientCallback(ASCLIENTPVT asClientPvt,
 	ASCLIENTCALLBACK pcallback)
 {
     ASGCLIENT	*pasgclient = asClientPvt;
@@ -445,7 +444,7 @@ long epicsShareAPI asRegisterClientCallback(ASCLIENTPVT asClientPvt,
     return(0);
 }
 
-void * epicsShareAPI asGetClientPvt(ASCLIENTPVT asClientPvt)
+void * LIBCOMSTD_API asGetClientPvt(ASCLIENTPVT asClientPvt)
 {
     ASGCLIENT	*pasgclient = asClientPvt;
 
@@ -454,7 +453,7 @@ void * epicsShareAPI asGetClientPvt(ASCLIENTPVT asClientPvt)
     return(pasgclient->userPvt);
 }
 
-void epicsShareAPI asPutClientPvt(ASCLIENTPVT asClientPvt,void *userPvt)
+void LIBCOMSTD_API asPutClientPvt(ASCLIENTPVT asClientPvt,void *userPvt)
 {
     ASGCLIENT	*pasgclient = asClientPvt;
     if(!asActive) return;
@@ -464,7 +463,7 @@ void epicsShareAPI asPutClientPvt(ASCLIENTPVT asClientPvt,void *userPvt)
     UNLOCK;
 }
 
-long epicsShareAPI asComputeAllAsg(void)
+long LIBCOMSTD_API asComputeAllAsg(void)
 {
     long status;
 
@@ -475,7 +474,7 @@ long epicsShareAPI asComputeAllAsg(void)
     return(status);
 }
 
-long epicsShareAPI asComputeAsg(ASG *pasg)
+long LIBCOMSTD_API asComputeAsg(ASG *pasg)
 {
     long status;
 
@@ -486,7 +485,7 @@ long epicsShareAPI asComputeAsg(ASG *pasg)
     return(status);
 }
 
-long epicsShareAPI asCompute(ASCLIENTPVT asClientPvt)
+long LIBCOMSTD_API asCompute(ASCLIENTPVT asClientPvt)
 {
     long status;
 
@@ -502,7 +501,7 @@ long epicsShareAPI asCompute(ASCLIENTPVT asClientPvt)
 static const char *asAccessName[] = {"NONE","READ","WRITE"};
 static const char *asTrapOption[] = {"NOTRAPWRITE","TRAPWRITE"};
 static const char *asLevelName[] = {"ASL0","ASL1"};
-int epicsShareAPI asDump(
+int LIBCOMSTD_API asDump(
 	void (*memcallback)(struct asgMember *,FILE *),
 	void (*clientcallback)(struct asgClient *,FILE *),
 	int verbose)
@@ -510,7 +509,7 @@ int epicsShareAPI asDump(
     return asDumpFP(stdout,memcallback,clientcallback,verbose);
 }
 
-int epicsShareAPI asDumpFP(
+int LIBCOMSTD_API asDumpFP(
 	FILE *fp,
 	void (*memcallback)(struct asgMember *,FILE *),
 	void (*clientcallback)(struct asgClient *,FILE *),
@@ -655,12 +654,12 @@ int epicsShareAPI asDumpFP(
     return(0);
 }
 
-int epicsShareAPI asDumpUag(const char *uagname)
+int LIBCOMSTD_API asDumpUag(const char *uagname)
 {
     return asDumpUagFP(stdout,uagname);
 }
 
-int epicsShareAPI asDumpUagFP(FILE *fp,const char *uagname)
+int LIBCOMSTD_API asDumpUagFP(FILE *fp,const char *uagname)
 {
     UAG		*puag;
     UAGNAME	*puagname;
@@ -686,12 +685,12 @@ int epicsShareAPI asDumpUagFP(FILE *fp,const char *uagname)
     return(0);
 }
 
-int epicsShareAPI asDumpHag(const char *hagname)
+int LIBCOMSTD_API asDumpHag(const char *hagname)
 {
     return asDumpHagFP(stdout,hagname);
 }
 
-int epicsShareAPI asDumpHagFP(FILE *fp,const char *hagname)
+int LIBCOMSTD_API asDumpHagFP(FILE *fp,const char *hagname)
 {
     HAG		*phag;
     HAGNAME	*phagname;
@@ -717,12 +716,12 @@ int epicsShareAPI asDumpHagFP(FILE *fp,const char *hagname)
     return(0);
 }
 
-int epicsShareAPI asDumpRules(const char *asgname)
+int LIBCOMSTD_API asDumpRules(const char *asgname)
 {
     return asDumpRulesFP(stdout,asgname);
 }
 
-int epicsShareAPI asDumpRulesFP(FILE *fp,const char *asgname)
+int LIBCOMSTD_API asDumpRulesFP(FILE *fp,const char *asgname)
 {
     ASG		*pasg;
     ASGINP	*pasginp;
@@ -801,13 +800,13 @@ int epicsShareAPI asDumpRulesFP(FILE *fp,const char *asgname)
     return(0);
 }
 
-int epicsShareAPI asDumpMem(const char *asgname,void (*memcallback)(ASMEMBERPVT,FILE *),
+int LIBCOMSTD_API asDumpMem(const char *asgname,void (*memcallback)(ASMEMBERPVT,FILE *),
   int clients)
 {
     return asDumpMemFP(stdout,asgname,memcallback,clients);
 }
 
-int epicsShareAPI asDumpMemFP(FILE *fp,const char *asgname,
+int LIBCOMSTD_API asDumpMemFP(FILE *fp,const char *asgname,
   void (*memcallback)(ASMEMBERPVT,FILE *),int clients)
 {
     ASG		*pasg;
@@ -858,12 +857,12 @@ int epicsShareAPI asDumpMemFP(FILE *fp,const char *asgname,
     return(0);
 }
 
-epicsShareFunc int epicsShareAPI asDumpHash(void)
+LIBCOM_API int LIBCOMSTD_API asDumpHash(void)
 {
     return asDumpHashFP(stdout);
 }
 
-epicsShareFunc int epicsShareAPI asDumpHashFP(FILE *fp)
+LIBCOM_API int LIBCOMSTD_API asDumpHashFP(FILE *fp)
 {
     if(!asActive) return(0);
     gphDumpFP(fp,pasbase->phash);
@@ -872,14 +871,14 @@ epicsShareFunc int epicsShareAPI asDumpHashFP(FILE *fp)
 
 /*Start of private routines*/
 /* asCalloc is "friend" function */
-epicsShareFunc void * epicsShareAPI asCalloc(size_t nobj,size_t size)
+LIBCOM_API void * LIBCOMSTD_API asCalloc(size_t nobj,size_t size)
 {
     void *p;
 
     p=callocMustSucceed(nobj,size,"asCalloc");
     return(p);
 }
-epicsShareFunc char * epicsShareAPI asStrdup(unsigned char *str)
+LIBCOM_API char * LIBCOMSTD_API asStrdup(unsigned char *str)
 {
 	size_t len = strlen((char *) str);
 	char *buf = asCalloc(1, len + 1);
diff --git a/modules/libcom/src/as/asTrapWrite.c b/modules/libcom/src/as/asTrapWrite.c
index 544e9a2..c6f9ab4 100644
--- a/modules/libcom/src/as/asTrapWrite.c
+++ b/modules/libcom/src/as/asTrapWrite.c
@@ -19,7 +19,6 @@
 #include <stdio.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "ellLib.h"
 #include "freeList.h"
 #include "epicsStdio.h"
@@ -71,7 +70,7 @@ static void asTrapWriteInit(void)
     pasTrapWritePvt->lock = epicsMutexMustCreate();
 }
 
-asTrapWriteId epicsShareAPI asTrapWriteRegisterListener(
+asTrapWriteId LIBCOMSTD_API asTrapWriteRegisterListener(
     asTrapWriteListener func)
 {
     listener *plistener;
@@ -84,7 +83,7 @@ asTrapWriteId epicsShareAPI asTrapWriteRegisterListener(
     return((asTrapWriteId)plistener);
 }
 
-void epicsShareAPI asTrapWriteUnregisterListener(asTrapWriteId id)
+void LIBCOMSTD_API asTrapWriteUnregisterListener(asTrapWriteId id)
 {
     listener *plistener = (listener *)id;
     writeMessage *pwriteMessage;
@@ -111,7 +110,7 @@ void epicsShareAPI asTrapWriteUnregisterListener(asTrapWriteId id)
     epicsMutexUnlock(pasTrapWritePvt->lock);
 }
 
-void * epicsShareAPI asTrapWriteBeforeWithData(
+void * LIBCOMSTD_API asTrapWriteBeforeWithData(
     const char *userid, const char *hostid, void *addr,
     int dbrType, int no_elements, void *data)
 {
@@ -149,7 +148,7 @@ void * epicsShareAPI asTrapWriteBeforeWithData(
     return pwriteMessage;
 }
 
-void epicsShareAPI asTrapWriteAfterWrite(void *pvt)
+void LIBCOMSTD_API asTrapWriteAfterWrite(void *pvt)
 {
     writeMessage *pwriteMessage = (writeMessage *)pvt;
     listenerPvt *plistenerPvt;
diff --git a/modules/libcom/src/as/asTrapWrite.h b/modules/libcom/src/as/asTrapWrite.h
index b8033cb..280ed1a 100644
--- a/modules/libcom/src/as/asTrapWrite.h
+++ b/modules/libcom/src/as/asTrapWrite.h
@@ -12,7 +12,7 @@
 #ifndef INCasTrapWriteh
 #define INCasTrapWriteh
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -32,9 +32,9 @@ typedef struct asTrapWriteMessage {
 typedef void *asTrapWriteId;
 typedef void(*asTrapWriteListener)(asTrapWriteMessage *pmessage,int after);
 
-epicsShareFunc asTrapWriteId epicsShareAPI asTrapWriteRegisterListener(
+LIBCOM_API asTrapWriteId LIBCOMSTD_API asTrapWriteRegisterListener(
     asTrapWriteListener func);
-epicsShareFunc void epicsShareAPI asTrapWriteUnregisterListener(
+LIBCOM_API void LIBCOMSTD_API asTrapWriteUnregisterListener(
     asTrapWriteId id);
 
 /*
diff --git a/modules/libcom/src/bucketLib/bucketLib.c b/modules/libcom/src/bucketLib/bucketLib.c
index 40df596..1912777 100644
--- a/modules/libcom/src/bucketLib/bucketLib.c
+++ b/modules/libcom/src/bucketLib/bucketLib.c
@@ -23,7 +23,6 @@
 #include <math.h>
 #include <time.h>
 
-#define epicsExportSharedSymbols
 #include "epicsAssert.h"
 #include "freeList.h"	/* bucketLib uses freeListLib inside the DLL */
 #include "bucketLib.h"
@@ -216,7 +215,7 @@ static BUCKETID bucketStringHash (BUCKET *pb, const void *pId)
 /*
  * bucketCreate()
  */
-epicsShareFunc BUCKET * epicsShareAPI bucketCreate (unsigned nHashTableEntries)
+LIBCOM_API BUCKET * LIBCOMSTD_API bucketCreate (unsigned nHashTableEntries)
 {
 	BUCKETID	mask;
 	unsigned	nbits;
@@ -283,7 +282,7 @@ epicsShareFunc BUCKET * epicsShareAPI bucketCreate (unsigned nHashTableEntries)
 /*
  * bucketFree()
  */
-epicsShareFunc int epicsShareAPI bucketFree (BUCKET *prb)
+LIBCOM_API int LIBCOMSTD_API bucketFree (BUCKET *prb)
 {
 	/*
 	 * deleting a bucket with entries in use
@@ -305,17 +304,17 @@ epicsShareFunc int epicsShareAPI bucketFree (BUCKET *prb)
 /*
  * bucketAddItem()
  */
-epicsShareFunc int epicsShareAPI 
+LIBCOM_API int LIBCOMSTD_API 
 	bucketAddItemUnsignedId(BUCKET *prb, const unsigned *pId, const void *pApp)
 {
 	return bucketAddItem(prb, &BSET[bidtUnsigned], pId, pApp);
 }
-epicsShareFunc int epicsShareAPI 
+LIBCOM_API int LIBCOMSTD_API 
 	bucketAddItemPointerId(BUCKET *prb, void * const *pId, const void *pApp)
 {
 	return bucketAddItem(prb, &BSET[bidtPointer], pId, pApp);
 }
-epicsShareFunc int epicsShareAPI 
+LIBCOM_API int LIBCOMSTD_API 
 	bucketAddItemStringId(BUCKET *prb, const char *pId, const void *pApp)
 {
 	return bucketAddItem(prb, &BSET[bidtString], pId, pApp);
@@ -395,15 +394,15 @@ static void *bucketLookupAndRemoveItem (BUCKET *prb, bucketSET *pBSET, const voi
 
 	return pApp;
 }
-epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemUnsignedId (BUCKET *prb, const unsigned *pId)
+LIBCOM_API void * LIBCOMSTD_API bucketLookupAndRemoveItemUnsignedId (BUCKET *prb, const unsigned *pId)
 {
     return bucketLookupAndRemoveItem(prb, &BSET[bidtUnsigned], pId);
 }
-epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemPointerId (BUCKET *prb, void * const *pId)
+LIBCOM_API void * LIBCOMSTD_API bucketLookupAndRemoveItemPointerId (BUCKET *prb, void * const *pId)
 {
 	return bucketLookupAndRemoveItem(prb, &BSET[bidtPointer], pId);
 }
-epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemStringId (BUCKET *prb, const char *pId)
+LIBCOM_API void * LIBCOMSTD_API bucketLookupAndRemoveItemStringId (BUCKET *prb, const char *pId)
 {
 	return bucketLookupAndRemoveItem(prb, &BSET[bidtString], pId);
 }
@@ -412,17 +411,17 @@ epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemStringId (BUCKET *p
 /*
  * bucketRemoveItem()
  */
-epicsShareFunc int epicsShareAPI 
+LIBCOM_API int LIBCOMSTD_API 
 	bucketRemoveItemUnsignedId (BUCKET *prb, const unsigned *pId)
 {
     return bucketLookupAndRemoveItem(prb, &BSET[bidtUnsigned], pId)?S_bucket_success:S_bucket_uknId;
 }
-epicsShareFunc int epicsShareAPI 
+LIBCOM_API int LIBCOMSTD_API 
 	bucketRemoveItemPointerId (BUCKET *prb, void * const *pId)
 {
 	return bucketLookupAndRemoveItem(prb, &BSET[bidtPointer], pId)?S_bucket_success:S_bucket_uknId;
 }
-epicsShareFunc int epicsShareAPI 
+LIBCOM_API int LIBCOMSTD_API 
 	bucketRemoveItemStringId (BUCKET *prb, const char *pId)
 {
 	return bucketLookupAndRemoveItem(prb, &BSET[bidtString], pId)?S_bucket_success:S_bucket_uknId;
@@ -432,17 +431,17 @@ epicsShareFunc int epicsShareAPI
 /*
  * bucketLookupItem()
  */
-epicsShareFunc void * epicsShareAPI
+LIBCOM_API void * LIBCOMSTD_API
  	bucketLookupItemUnsignedId (BUCKET *prb, const unsigned *pId)
 {
 	return bucketLookupItem(prb, &BSET[bidtUnsigned], pId);
 }
-epicsShareFunc void * epicsShareAPI
+LIBCOM_API void * LIBCOMSTD_API
 	bucketLookupItemPointerId (BUCKET *prb, void * const *pId)
 {
 	return bucketLookupItem(prb, &BSET[bidtPointer], pId);
 }
-epicsShareFunc void * epicsShareAPI
+LIBCOM_API void * LIBCOMSTD_API
 	bucketLookupItemStringId (BUCKET *prb, const char *pId)
 {
 	return bucketLookupItem(prb, &BSET[bidtString], pId);
@@ -474,7 +473,7 @@ static void *bucketLookupItem (BUCKET *pb, bucketSET *pBSET, const void *pId)
 /*
  * bucketShow()
  */
-epicsShareFunc int epicsShareAPI bucketShow(BUCKET *pb)
+LIBCOM_API int LIBCOMSTD_API bucketShow(BUCKET *pb)
 {
 	ITEM 		**ppi;
 	ITEM 		*pi;
diff --git a/modules/libcom/src/bucketLib/bucketLib.h b/modules/libcom/src/bucketLib/bucketLib.h
index 60d73b4..192d679 100644
--- a/modules/libcom/src/bucketLib/bucketLib.h
+++ b/modules/libcom/src/bucketLib/bucketLib.h
@@ -25,7 +25,7 @@ extern "C" {
 
 #include "errMdef.h"
 #include "epicsTypes.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 typedef	unsigned 	BUCKETID;
 
@@ -46,32 +46,32 @@ typedef struct bucket{
         unsigned        nInUse;
 }BUCKET;
 
-epicsShareFunc BUCKET * epicsShareAPI bucketCreate (unsigned nHashTableEntries);
-epicsShareFunc int epicsShareAPI bucketFree (BUCKET *prb);
-epicsShareFunc int epicsShareAPI bucketShow (BUCKET *pb);
+LIBCOM_API BUCKET * LIBCOMSTD_API bucketCreate (unsigned nHashTableEntries);
+LIBCOM_API int LIBCOMSTD_API bucketFree (BUCKET *prb);
+LIBCOM_API int LIBCOMSTD_API bucketShow (BUCKET *pb);
 
 /*
  * !! Identifier must exist (and remain constant) at the specified address until
  * the item is deleted from the bucket !!
  */
-epicsShareFunc int epicsShareAPI bucketAddItemUnsignedId (BUCKET *prb, 
+LIBCOM_API int LIBCOMSTD_API bucketAddItemUnsignedId (BUCKET *prb, 
 		const unsigned *pId, const void *pApp);
-epicsShareFunc int epicsShareAPI bucketAddItemPointerId (BUCKET *prb, 
+LIBCOM_API int LIBCOMSTD_API bucketAddItemPointerId (BUCKET *prb, 
 		void * const *pId, const void *pApp);
-epicsShareFunc int epicsShareAPI bucketAddItemStringId (BUCKET *prb, 
+LIBCOM_API int LIBCOMSTD_API bucketAddItemStringId (BUCKET *prb, 
 		const char *pId, const void *pApp);
 
-epicsShareFunc int epicsShareAPI bucketRemoveItemUnsignedId (BUCKET *prb, const unsigned *pId);
-epicsShareFunc int epicsShareAPI bucketRemoveItemPointerId (BUCKET *prb, void * const *pId);
-epicsShareFunc int epicsShareAPI bucketRemoveItemStringId (BUCKET *prb, const char *pId);
+LIBCOM_API int LIBCOMSTD_API bucketRemoveItemUnsignedId (BUCKET *prb, const unsigned *pId);
+LIBCOM_API int LIBCOMSTD_API bucketRemoveItemPointerId (BUCKET *prb, void * const *pId);
+LIBCOM_API int LIBCOMSTD_API bucketRemoveItemStringId (BUCKET *prb, const char *pId);
 
-epicsShareFunc void * epicsShareAPI bucketLookupItemUnsignedId (BUCKET *prb, const unsigned *pId);
-epicsShareFunc void * epicsShareAPI bucketLookupItemPointerId (BUCKET *prb, void * const *pId);
-epicsShareFunc void * epicsShareAPI bucketLookupItemStringId (BUCKET *prb, const char *pId);
+LIBCOM_API void * LIBCOMSTD_API bucketLookupItemUnsignedId (BUCKET *prb, const unsigned *pId);
+LIBCOM_API void * LIBCOMSTD_API bucketLookupItemPointerId (BUCKET *prb, void * const *pId);
+LIBCOM_API void * LIBCOMSTD_API bucketLookupItemStringId (BUCKET *prb, const char *pId);
 
-epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemUnsignedId (BUCKET *prb, const unsigned *pId);
-epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemPointerId (BUCKET *prb, void * const *pId);
-epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemStringId (BUCKET *prb, const char *pId);
+LIBCOM_API void * LIBCOMSTD_API bucketLookupAndRemoveItemUnsignedId (BUCKET *prb, const unsigned *pId);
+LIBCOM_API void * LIBCOMSTD_API bucketLookupAndRemoveItemPointerId (BUCKET *prb, void * const *pId);
+LIBCOM_API void * LIBCOMSTD_API bucketLookupAndRemoveItemStringId (BUCKET *prb, const char *pId);
 
 
 /*
diff --git a/modules/libcom/src/calc/calcPerform.c b/modules/libcom/src/calc/calcPerform.c
index c0f4aeb..9bf08e9 100644
--- a/modules/libcom/src/calc/calcPerform.c
+++ b/modules/libcom/src/calc/calcPerform.c
@@ -16,7 +16,6 @@
 #include <stdio.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "osiUnistd.h"
 #include "dbDefs.h"
 #include "epicsMath.h"
@@ -41,7 +40,7 @@ static int cond_search(const char **ppinst, int match);
  *
  * Evalutate the postfix expression
  */
-epicsShareFunc long
+LIBCOM_API long
     calcPerform(double *parg, double *presult, const char *pinst)
 {
     double stack[CALCPERFORM_STACK+1];	/* zero'th entry not used */
@@ -387,7 +386,7 @@ epicsShareFunc long
 #endif
 
 
-epicsShareFunc long
+LIBCOM_API long
 calcArgUsage(const char *pinst, unsigned long *pinputs, unsigned long *pstores)
 {
     unsigned long inputs = 0;
diff --git a/modules/libcom/src/calc/postfix.c b/modules/libcom/src/calc/postfix.c
index 463ceea..ad698ef 100644
--- a/modules/libcom/src/calc/postfix.c
+++ b/modules/libcom/src/calc/postfix.c
@@ -17,7 +17,6 @@
 #include <string.h>
 #include <ctype.h>
 
-#define epicsExportSharedSymbols
 #include "dbDefs.h"
 #include "epicsAssert.h"
 #include "epicsStdlib.h"
@@ -25,7 +24,7 @@
 #include "epicsTypes.h"
 #include "postfix.h"
 #include "postfixPvt.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 
 /* declarations for postfix */
@@ -205,7 +204,7 @@ static int
  *
  * convert an infix expression to a postfix expression
  */
-epicsShareFunc long
+LIBCOM_API long
     postfix(const char *psrc, char *pout, short *perror)
 {
     ELEMENT stack[80];
@@ -489,7 +488,7 @@ bad:
  *
  * Return a message string appropriate for the given error code
  */
-epicsShareFunc const char *
+LIBCOM_API const char *
     calcErrorStr(short error)
 {
     static const char *errStrs[] = {
@@ -519,7 +518,7 @@ epicsShareFunc const char *
  *
  * Disassemble the given postfix instructions to stdout
  */
-epicsShareFunc void
+LIBCOM_API void
     calcExprDump(const char *pinst)
 {
     static const char *opcodes[] = {
diff --git a/modules/libcom/src/calc/postfix.h b/modules/libcom/src/calc/postfix.h
index b904920..b2037b3 100644
--- a/modules/libcom/src/calc/postfix.h
+++ b/modules/libcom/src/calc/postfix.h
@@ -14,7 +14,7 @@
 #ifndef INCpostfixh
 #define INCpostfixh
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #define CALCPERFORM_NARGS 12
 #define CALCPERFORM_STACK 80
@@ -67,19 +67,19 @@
 extern "C" {
 #endif
 
-epicsShareFunc long
+LIBCOM_API long
     postfix(const char *pinfix, char *ppostfix, short *perror);
 
-epicsShareFunc long
+LIBCOM_API long
     calcPerform(double *parg, double *presult, const char *ppostfix);
 
-epicsShareFunc long
+LIBCOM_API long
     calcArgUsage(const char *ppostfix, unsigned long *pinputs, unsigned long *pstores);
 
-epicsShareFunc const char *
+LIBCOM_API const char *
     calcErrorStr(short error);
 
-epicsShareFunc void
+LIBCOM_API void
     calcExprDump(const char *pinst);
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/cvtFast/cvtFast.c b/modules/libcom/src/cvtFast/cvtFast.c
index 106c1ba..887f0c8 100644
--- a/modules/libcom/src/cvtFast/cvtFast.c
+++ b/modules/libcom/src/cvtFast/cvtFast.c
@@ -16,7 +16,6 @@
 #include <string.h>
 #include <limits.h>
 
-#define epicsExportSharedSymbols
 #include "cvtFast.h"
 #include "epicsMath.h"
 #include "epicsStdio.h"
diff --git a/modules/libcom/src/cvtFast/cvtFast.h b/modules/libcom/src/cvtFast/cvtFast.h
index db06dda..31c04c4 100644
--- a/modules/libcom/src/cvtFast/cvtFast.h
+++ b/modules/libcom/src/cvtFast/cvtFast.h
@@ -20,7 +20,7 @@
 #include <stddef.h>
 
 #include "epicsTypes.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -29,38 +29,38 @@ extern "C" {
 /*
  * All functions return the number of characters in the output
  */
-epicsShareFunc int
+LIBCOM_API int
     cvtFloatToString(float val, char *pdest, epicsUInt16 prec);
-epicsShareFunc int
+LIBCOM_API int
     cvtDoubleToString(double val, char *pdest, epicsUInt16 prec);
 
-epicsShareFunc int
+LIBCOM_API int
     cvtFloatToExpString(float val, char *pdest, epicsUInt16 prec);
-epicsShareFunc int
+LIBCOM_API int
     cvtDoubleToExpString(double val, char *pdest, epicsUInt16 prec);
-epicsShareFunc int
+LIBCOM_API int
     cvtFloatToCompactString(float val, char *pdest, epicsUInt16 prec);
-epicsShareFunc int
+LIBCOM_API int
     cvtDoubleToCompactString(double val, char *pdest, epicsUInt16 prec);
 
-epicsShareFunc size_t
+LIBCOM_API size_t
     cvtInt32ToString(epicsInt32 val, char *pdest);
-epicsShareFunc size_t
+LIBCOM_API size_t
     cvtUInt32ToString(epicsUInt32 val, char *pdest);
-epicsShareFunc size_t
+LIBCOM_API size_t
     cvtInt64ToString(epicsInt64 val, char *pdest);
-epicsShareFunc size_t
+LIBCOM_API size_t
     cvtUInt64ToString(epicsUInt64 val, char *pdest);
 
-epicsShareFunc size_t
+LIBCOM_API size_t
     cvtInt32ToHexString(epicsInt32 val, char *pdest);
-epicsShareFunc size_t
+LIBCOM_API size_t
     cvtUInt32ToHexString(epicsUInt32 val, char *pdest);
-epicsShareFunc size_t
+LIBCOM_API size_t
     cvtInt32ToOctalString(epicsInt32 val, char *pdest);
-epicsShareFunc size_t
+LIBCOM_API size_t
     cvtInt64ToHexString(epicsInt64 val, char *pdest);
-epicsShareFunc size_t
+LIBCOM_API size_t
     cvtUInt64ToHexString(epicsUInt64 val, char *pdest);
 
 /* Support the original names */
diff --git a/modules/libcom/src/cxxTemplates/epicsSingleton.h b/modules/libcom/src/cxxTemplates/epicsSingleton.h
index 2c63d3f..89c3ab9 100644
--- a/modules/libcom/src/cxxTemplates/epicsSingleton.h
+++ b/modules/libcom/src/cxxTemplates/epicsSingleton.h
@@ -18,10 +18,10 @@
 #include <new>
 #include <cstddef>
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "epicsAssert.h"
 
-class epicsShareClass SingletonUntyped {
+class LIBCOM_API SingletonUntyped {
 public:
     SingletonUntyped ();
     ~SingletonUntyped ();
diff --git a/modules/libcom/src/cxxTemplates/epicsSingletonMutex.cpp b/modules/libcom/src/cxxTemplates/epicsSingletonMutex.cpp
index 8cd69d9..b878e3d 100644
--- a/modules/libcom/src/cxxTemplates/epicsSingletonMutex.cpp
+++ b/modules/libcom/src/cxxTemplates/epicsSingletonMutex.cpp
@@ -14,7 +14,6 @@
 
 #include <climits>
 
-#define epicsExportSharedSymbols
 #include "epicsMutex.h"
 #include "epicsGuard.h"
 #include "epicsThread.h"
diff --git a/modules/libcom/src/cxxTemplates/resourceLib.h b/modules/libcom/src/cxxTemplates/resourceLib.h
index 7b61e23..ff7ef99 100644
--- a/modules/libcom/src/cxxTemplates/resourceLib.h
+++ b/modules/libcom/src/cxxTemplates/resourceLib.h
@@ -41,7 +41,7 @@
 
 #include "tsSLList.h"
 #include "epicsString.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 typedef size_t resTableIndex;
 
 template < class T, class ID > class resTableIter;
@@ -253,7 +253,7 @@ private:
 //
 // character string identifier
 //
-class epicsShareClass stringId {
+class LIBCOM_API stringId {
 public:
     enum allocationType {copyString, refString};
     stringId (const char * idIn, allocationType typeIn=copyString);
diff --git a/modules/libcom/src/dbmf/dbmf.c b/modules/libcom/src/dbmf/dbmf.c
index e04a7be..035e75a 100644
--- a/modules/libcom/src/dbmf/dbmf.c
+++ b/modules/libcom/src/dbmf/dbmf.c
@@ -28,7 +28,6 @@
 #define REDZONE 0
 #endif
 
-#define epicsExportSharedSymbols
 #include "cantProceed.h"
 #include "epicsMutex.h"
 #include "ellLib.h"
diff --git a/modules/libcom/src/dbmf/dbmf.h b/modules/libcom/src/dbmf/dbmf.h
index 2c8a28f..6ced560 100644
--- a/modules/libcom/src/dbmf/dbmf.h
+++ b/modules/libcom/src/dbmf/dbmf.h
@@ -17,21 +17,21 @@
 #define DBMF_H
 
 #include <stdlib.h>
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-epicsShareFunc int dbmfInit(size_t size, int chunkItems);
-epicsShareFunc void * dbmfMalloc(size_t bytes);
-epicsShareFunc char * dbmfStrdup(const char *str);
-epicsShareFunc char * dbmfStrndup(const char *str, size_t len);
-epicsShareFunc char * dbmfStrcat3(const char *lhs, const char *mid,
+LIBCOM_API int dbmfInit(size_t size, int chunkItems);
+LIBCOM_API void * dbmfMalloc(size_t bytes);
+LIBCOM_API char * dbmfStrdup(const char *str);
+LIBCOM_API char * dbmfStrndup(const char *str, size_t len);
+LIBCOM_API char * dbmfStrcat3(const char *lhs, const char *mid,
     const char *rhs);
-epicsShareFunc void dbmfFree(void *bytes);
-epicsShareFunc void dbmfFreeChunks(void);
-epicsShareFunc int dbmfShow(int level);
+LIBCOM_API void dbmfFree(void *bytes);
+LIBCOM_API void dbmfFreeChunks(void);
+LIBCOM_API int dbmfShow(int level);
 
 /* Rules:
  * 1) Size is always made a multiple of 8.
diff --git a/modules/libcom/src/ellLib/ellLib.c b/modules/libcom/src/ellLib/ellLib.c
index c539a84..184202f 100644
--- a/modules/libcom/src/ellLib/ellLib.c
+++ b/modules/libcom/src/ellLib/ellLib.c
@@ -13,7 +13,6 @@
 
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include "epicsAssert.h"
 #include "ellLib.h"
 
diff --git a/modules/libcom/src/ellLib/ellLib.h b/modules/libcom/src/ellLib/ellLib.h
index 52b58d1..fab2b8d 100644
--- a/modules/libcom/src/ellLib/ellLib.h
+++ b/modules/libcom/src/ellLib/ellLib.h
@@ -13,7 +13,7 @@
 #ifndef INC_ellLib_H
 #define INC_ellLib_H
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -46,20 +46,20 @@ typedef void (*FREEFUNC)(void *);
 #define ellPrevious(PNODE) ((PNODE)->previous)
 #define ellFree(PLIST)     ellFree2(PLIST, free)
 
-epicsShareFunc void ellAdd (ELLLIST *pList, ELLNODE *pNode);
-epicsShareFunc void ellConcat (ELLLIST *pDstList, ELLLIST *pAddList);
-epicsShareFunc void ellDelete (ELLLIST *pList, ELLNODE *pNode);
-epicsShareFunc void ellExtract (ELLLIST *pSrcList, ELLNODE *pStartNode, ELLNODE *pEndNode, ELLLIST *pDstList);
-epicsShareFunc ELLNODE * ellGet (ELLLIST *pList);
-epicsShareFunc ELLNODE * ellPop (ELLLIST *pList);
-epicsShareFunc void ellInsert (ELLLIST *plist, ELLNODE *pPrev, ELLNODE *pNode);
-epicsShareFunc ELLNODE * ellNth (ELLLIST *pList, int nodeNum);
-epicsShareFunc ELLNODE * ellNStep (ELLNODE *pNode, int nStep);
-epicsShareFunc int  ellFind (ELLLIST *pList, ELLNODE *pNode);
+LIBCOM_API void ellAdd (ELLLIST *pList, ELLNODE *pNode);
+LIBCOM_API void ellConcat (ELLLIST *pDstList, ELLLIST *pAddList);
+LIBCOM_API void ellDelete (ELLLIST *pList, ELLNODE *pNode);
+LIBCOM_API void ellExtract (ELLLIST *pSrcList, ELLNODE *pStartNode, ELLNODE *pEndNode, ELLLIST *pDstList);
+LIBCOM_API ELLNODE * ellGet (ELLLIST *pList);
+LIBCOM_API ELLNODE * ellPop (ELLLIST *pList);
+LIBCOM_API void ellInsert (ELLLIST *plist, ELLNODE *pPrev, ELLNODE *pNode);
+LIBCOM_API ELLNODE * ellNth (ELLLIST *pList, int nodeNum);
+LIBCOM_API ELLNODE * ellNStep (ELLNODE *pNode, int nStep);
+LIBCOM_API int  ellFind (ELLLIST *pList, ELLNODE *pNode);
 typedef int (*pListCmp)(const ELLNODE* A, const ELLNODE* B);
-epicsShareFunc void ellSortStable(ELLLIST *pList, pListCmp);
-epicsShareFunc void ellFree2 (ELLLIST *pList, FREEFUNC freeFunc);
-epicsShareFunc void ellVerify (ELLLIST *pList);
+LIBCOM_API void ellSortStable(ELLLIST *pList, pListCmp);
+LIBCOM_API void ellFree2 (ELLLIST *pList, FREEFUNC freeFunc);
+LIBCOM_API void ellVerify (ELLLIST *pList);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/ellLib/ellSort.c b/modules/libcom/src/ellLib/ellSort.c
index 2f8f274..1aa6679 100644
--- a/modules/libcom/src/ellLib/ellSort.c
+++ b/modules/libcom/src/ellLib/ellSort.c
@@ -12,7 +12,6 @@
  */
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include "epicsAssert.h"
 #include "ellLib.h"
 
diff --git a/modules/libcom/src/env/bldEnvData.pl b/modules/libcom/src/env/bldEnvData.pl
index 693be65..d4c4731 100644
--- a/modules/libcom/src/env/bldEnvData.pl
+++ b/modules/libcom/src/env/bldEnvData.pl
@@ -44,7 +44,7 @@ open SRC, '<', $env_defs
 
 my @vars;
 while (<SRC>) {
-    if (m/epicsShareExtern\s+const\s+ENV_PARAM\s+([A-Za-z_]\w*)\s*;/) {
+    if (m/LIBCOM_API extern\s+const\s+ENV_PARAM\s+([A-Za-z_]\w*)\s*;/) {
         push @vars, $1;
     }
 }
@@ -96,7 +96,6 @@ $sources
  */
 
 #include <stddef.h>
-#define epicsExportSharedSymbols
 #include "envDefs.h"
 
 END
@@ -113,14 +112,14 @@ foreach my $var (@vars) {
         $default = '';
     }
 
-    print OUT "epicsShareDef const ENV_PARAM $var =\n",
+    print OUT "const ENV_PARAM $var =\n",
               "    {\"$var\", \"$default\"};\n";
 }
 
 # Also provide a list of all defined parameters
 #
 print OUT "\n",
-    "epicsShareDef const ENV_PARAM* env_param_list[] = {\n",
+    "const ENV_PARAM* env_param_list[] = {\n",
     wrap('    ', '    ', join(', ', map("&$_", @vars), 'NULL')),
     "\n};\n";
 close OUT;
diff --git a/modules/libcom/src/env/envDefs.h b/modules/libcom/src/env/envDefs.h
index 2490702..fdb9125 100644
--- a/modules/libcom/src/env/envDefs.h
+++ b/modules/libcom/src/env/envDefs.h
@@ -32,7 +32,7 @@
 extern "C" {
 #endif
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 typedef struct envParam {
     char	*name;		/* text name of the parameter */
@@ -40,65 +40,65 @@ typedef struct envParam {
 } ENV_PARAM;
 
 /*
- * bldEnvData.pl looks for "epicsShareExtern const ENV_PARAM <name>;"
+ * bldEnvData.pl looks for "LIBCOM_API extern const ENV_PARAM <name>;"
  */
-epicsShareExtern const ENV_PARAM EPICS_CA_ADDR_LIST;
-epicsShareExtern const ENV_PARAM EPICS_CA_CONN_TMO;
-epicsShareExtern const ENV_PARAM EPICS_CA_AUTO_ADDR_LIST;
-epicsShareExtern const ENV_PARAM EPICS_CA_REPEATER_PORT;
-epicsShareExtern const ENV_PARAM EPICS_CA_SERVER_PORT;
-epicsShareExtern const ENV_PARAM EPICS_CA_MAX_ARRAY_BYTES;
-epicsShareExtern const ENV_PARAM EPICS_CA_AUTO_ARRAY_BYTES;
-epicsShareExtern const ENV_PARAM EPICS_CA_MAX_SEARCH_PERIOD;
-epicsShareExtern const ENV_PARAM EPICS_CA_NAME_SERVERS;
-epicsShareExtern const ENV_PARAM EPICS_CA_MCAST_TTL;
-epicsShareExtern const ENV_PARAM EPICS_CAS_INTF_ADDR_LIST;
-epicsShareExtern const ENV_PARAM EPICS_CAS_IGNORE_ADDR_LIST;
-epicsShareExtern const ENV_PARAM EPICS_CAS_AUTO_BEACON_ADDR_LIST;
-epicsShareExtern const ENV_PARAM EPICS_CAS_BEACON_ADDR_LIST;
-epicsShareExtern const ENV_PARAM EPICS_CAS_SERVER_PORT;
-epicsShareExtern const ENV_PARAM EPICS_CA_BEACON_PERIOD; /* deprecated */
-epicsShareExtern const ENV_PARAM EPICS_CAS_BEACON_PERIOD;
-epicsShareExtern const ENV_PARAM EPICS_CAS_BEACON_PORT;
-epicsShareExtern const ENV_PARAM EPICS_BUILD_COMPILER_CLASS;
-epicsShareExtern const ENV_PARAM EPICS_BUILD_OS_CLASS;
-epicsShareExtern const ENV_PARAM EPICS_BUILD_TARGET_ARCH;
-epicsShareExtern const ENV_PARAM EPICS_TZ;
-epicsShareExtern const ENV_PARAM EPICS_TS_NTP_INET;
-epicsShareExtern const ENV_PARAM EPICS_IOC_IGNORE_SERVERS;
-epicsShareExtern const ENV_PARAM EPICS_IOC_LOG_PORT;
-epicsShareExtern const ENV_PARAM EPICS_IOC_LOG_INET;
-epicsShareExtern const ENV_PARAM EPICS_IOC_LOG_FILE_LIMIT;
-epicsShareExtern const ENV_PARAM EPICS_IOC_LOG_FILE_NAME;
-epicsShareExtern const ENV_PARAM EPICS_IOC_LOG_FILE_COMMAND;
-epicsShareExtern const ENV_PARAM IOCSH_PS1;
-epicsShareExtern const ENV_PARAM IOCSH_HISTSIZE;
-epicsShareExtern const ENV_PARAM IOCSH_HISTEDIT_DISABLE;
+LIBCOM_API extern const ENV_PARAM EPICS_CA_ADDR_LIST;
+LIBCOM_API extern const ENV_PARAM EPICS_CA_CONN_TMO;
+LIBCOM_API extern const ENV_PARAM EPICS_CA_AUTO_ADDR_LIST;
+LIBCOM_API extern const ENV_PARAM EPICS_CA_REPEATER_PORT;
+LIBCOM_API extern const ENV_PARAM EPICS_CA_SERVER_PORT;
+LIBCOM_API extern const ENV_PARAM EPICS_CA_MAX_ARRAY_BYTES;
+LIBCOM_API extern const ENV_PARAM EPICS_CA_AUTO_ARRAY_BYTES;
+LIBCOM_API extern const ENV_PARAM EPICS_CA_MAX_SEARCH_PERIOD;
+LIBCOM_API extern const ENV_PARAM EPICS_CA_NAME_SERVERS;
+LIBCOM_API extern const ENV_PARAM EPICS_CA_MCAST_TTL;
+LIBCOM_API extern const ENV_PARAM EPICS_CAS_INTF_ADDR_LIST;
+LIBCOM_API extern const ENV_PARAM EPICS_CAS_IGNORE_ADDR_LIST;
+LIBCOM_API extern const ENV_PARAM EPICS_CAS_AUTO_BEACON_ADDR_LIST;
+LIBCOM_API extern const ENV_PARAM EPICS_CAS_BEACON_ADDR_LIST;
+LIBCOM_API extern const ENV_PARAM EPICS_CAS_SERVER_PORT;
+LIBCOM_API extern const ENV_PARAM EPICS_CA_BEACON_PERIOD; /* deprecated */
+LIBCOM_API extern const ENV_PARAM EPICS_CAS_BEACON_PERIOD;
+LIBCOM_API extern const ENV_PARAM EPICS_CAS_BEACON_PORT;
+LIBCOM_API extern const ENV_PARAM EPICS_BUILD_COMPILER_CLASS;
+LIBCOM_API extern const ENV_PARAM EPICS_BUILD_OS_CLASS;
+LIBCOM_API extern const ENV_PARAM EPICS_BUILD_TARGET_ARCH;
+LIBCOM_API extern const ENV_PARAM EPICS_TZ;
+LIBCOM_API extern const ENV_PARAM EPICS_TS_NTP_INET;
+LIBCOM_API extern const ENV_PARAM EPICS_IOC_IGNORE_SERVERS;
+LIBCOM_API extern const ENV_PARAM EPICS_IOC_LOG_PORT;
+LIBCOM_API extern const ENV_PARAM EPICS_IOC_LOG_INET;
+LIBCOM_API extern const ENV_PARAM EPICS_IOC_LOG_FILE_LIMIT;
+LIBCOM_API extern const ENV_PARAM EPICS_IOC_LOG_FILE_NAME;
+LIBCOM_API extern const ENV_PARAM EPICS_IOC_LOG_FILE_COMMAND;
+LIBCOM_API extern const ENV_PARAM IOCSH_PS1;
+LIBCOM_API extern const ENV_PARAM IOCSH_HISTSIZE;
+LIBCOM_API extern const ENV_PARAM IOCSH_HISTEDIT_DISABLE;
 
-epicsShareExtern const ENV_PARAM *env_param_list[];
+LIBCOM_API extern const ENV_PARAM *env_param_list[];
 
 struct in_addr;
 
-epicsShareFunc char * epicsShareAPI 
+LIBCOM_API char * LIBCOMSTD_API 
 	envGetConfigParam(const ENV_PARAM *pParam, int bufDim, char *pBuf);
-epicsShareFunc const char * epicsShareAPI 
+LIBCOM_API const char * LIBCOMSTD_API 
 	envGetConfigParamPtr(const ENV_PARAM *pParam);
-epicsShareFunc long epicsShareAPI 
+LIBCOM_API long LIBCOMSTD_API 
 	envPrtConfigParam(const ENV_PARAM *pParam);
-epicsShareFunc long epicsShareAPI 
+LIBCOM_API long LIBCOMSTD_API 
 	envGetInetAddrConfigParam(const ENV_PARAM *pParam, struct in_addr *pAddr);
-epicsShareFunc long epicsShareAPI 
+LIBCOM_API long LIBCOMSTD_API 
 	envGetDoubleConfigParam(const ENV_PARAM *pParam, double *pDouble);
-epicsShareFunc long epicsShareAPI 
+LIBCOM_API long LIBCOMSTD_API 
 	envGetLongConfigParam(const ENV_PARAM *pParam, long *pLong);
-epicsShareFunc unsigned short epicsShareAPI envGetInetPortConfigParam 
+LIBCOM_API unsigned short LIBCOMSTD_API envGetInetPortConfigParam 
         (const ENV_PARAM *pEnv, unsigned short defaultPort);
-epicsShareFunc long epicsShareAPI
+LIBCOM_API long LIBCOMSTD_API
     envGetBoolConfigParam(const ENV_PARAM *pParam, int *pBool);
-epicsShareFunc long epicsShareAPI epicsPrtEnvParams(void);
-epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *value);
-epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name);
-epicsShareFunc void epicsShareAPI epicsEnvShow (const char *name);
+LIBCOM_API long LIBCOMSTD_API epicsPrtEnvParams(void);
+LIBCOM_API void LIBCOMSTD_API epicsEnvSet (const char *name, const char *value);
+LIBCOM_API void LIBCOMSTD_API epicsEnvUnset (const char *name);
+LIBCOM_API void LIBCOMSTD_API epicsEnvShow (const char *name);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/env/envSubr.c b/modules/libcom/src/env/envSubr.c
index 283b132..e036138 100644
--- a/modules/libcom/src/env/envSubr.c
+++ b/modules/libcom/src/env/envSubr.c
@@ -40,7 +40,6 @@
 #include <string.h>
 #include <limits.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStdlib.h"
 #include "epicsStdio.h"
 #include "epicsString.h"
@@ -79,7 +78,7 @@
 *	}
 *
 *-*/
-const char * epicsShareAPI envGetConfigParamPtr(
+const char * LIBCOMSTD_API envGetConfigParamPtr(
 const ENV_PARAM *pParam /* I pointer to config param structure */
 )
 {
@@ -137,7 +136,7 @@ const ENV_PARAM *pParam /* I pointer to config param structure */
 *	    printf("DISPLAY is %s\n", temp);
 *
 *-*/
-char * epicsShareAPI envGetConfigParam(
+char * LIBCOMSTD_API envGetConfigParam(
 const ENV_PARAM *pParam,/* I pointer to config param structure */
 int	bufDim,		/* I dimension of parameter buffer */
 char	*pBuf		/* I pointer to parameter buffer  */
@@ -189,7 +188,7 @@ char	*pBuf		/* I pointer to parameter buffer  */
 *	}
 *
 *-*/
-long epicsShareAPI envGetDoubleConfigParam(
+long LIBCOMSTD_API envGetDoubleConfigParam(
 const ENV_PARAM *pParam,/* I pointer to config param structure */
 double	*pDouble	/* O pointer to place to store value */
 )
@@ -244,7 +243,7 @@ double	*pDouble	/* O pointer to place to store value */
 *	}
 *
 *-*/
-long epicsShareAPI envGetInetAddrConfigParam(
+long LIBCOMSTD_API envGetInetAddrConfigParam(
 const ENV_PARAM *pParam,/* I pointer to config param structure */
 struct in_addr *pAddr	/* O pointer to struct to receive inet addr */
 )
@@ -301,7 +300,7 @@ struct in_addr *pAddr	/* O pointer to struct to receive inet addr */
 *	}
 *
 *-*/
-long epicsShareAPI envGetLongConfigParam(
+long LIBCOMSTD_API envGetLongConfigParam(
 const ENV_PARAM *pParam,/* I pointer to config param structure */
 long	*pLong		/* O pointer to place to store value */
 )
@@ -322,7 +321,7 @@ long	*pLong		/* O pointer to place to store value */
 }
 
 
-long epicsShareAPI
+long LIBCOMSTD_API
 envGetBoolConfigParam(const ENV_PARAM *pParam, int *pBool)
 {
     char text[20];
@@ -351,7 +350,7 @@ envGetBoolConfigParam(const ENV_PARAM *pParam, int *pBool)
 *	envPrtConfigParam(&EPICS_TS_NTP_INET);
 *
 *-*/
-long epicsShareAPI envPrtConfigParam(
+long LIBCOMSTD_API envPrtConfigParam(
 const ENV_PARAM *pParam)	/* pointer to config param structure */
 {
     const char *pVal;
@@ -381,7 +380,7 @@ const ENV_PARAM *pParam)	/* pointer to config param structure */
 *       epicsPrtEnvParams();
 *
 *-*/
-long epicsShareAPI
+long LIBCOMSTD_API
 epicsPrtEnvParams(void)
 {
     const ENV_PARAM **ppParam = env_param_list;
@@ -395,7 +394,7 @@ epicsPrtEnvParams(void)
 /*
  * envGetInetPortConfigParam ()
  */
-epicsShareFunc unsigned short epicsShareAPI envGetInetPortConfigParam 
+LIBCOM_API unsigned short LIBCOMSTD_API envGetInetPortConfigParam 
                 (const ENV_PARAM *pEnv, unsigned short defaultPort)
 {
     long        longStatus;
diff --git a/modules/libcom/src/error/errSymLib.c b/modules/libcom/src/error/errSymLib.c
index 8f59718..33fe2e5 100644
--- a/modules/libcom/src/error/errSymLib.c
+++ b/modules/libcom/src/error/errSymLib.c
@@ -19,7 +19,6 @@
 #include <math.h>
 #include <limits.h>
 
-#define epicsExportSharedSymbols
 #include "cantProceed.h"
 #include "epicsAssert.h"
 #include "epicsStdio.h"
diff --git a/modules/libcom/src/error/errSymTbl.h b/modules/libcom/src/error/errSymTbl.h
index 7fc25f7..c3c0c49 100644
--- a/modules/libcom/src/error/errSymTbl.h
+++ b/modules/libcom/src/error/errSymTbl.h
@@ -12,7 +12,7 @@
 
 #include <stddef.h>
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "epicsTypes.h"
 
 /* ERRSYMBOL - entry in symbol table */
@@ -34,14 +34,14 @@ typedef ERRSYMTAB *ERRSYMTAB_ID;
 extern "C" {
 #endif
 
-epicsShareFunc void errSymLookup(long status, char *pBuf, size_t bufLength);
-epicsShareFunc const char* errSymMsg(long status);
-epicsShareFunc void errSymTest(epicsUInt16 modnum, epicsUInt16 begErrNum,
+LIBCOM_API void errSymLookup(long status, char *pBuf, size_t bufLength);
+LIBCOM_API const char* errSymMsg(long status);
+LIBCOM_API void errSymTest(epicsUInt16 modnum, epicsUInt16 begErrNum,
     epicsUInt16 endErrNum);
-epicsShareFunc void errSymTestPrint(long errNum);
-epicsShareFunc int errSymBld(void);
-epicsShareFunc int errSymbolAdd(long errNum, const char *name);
-epicsShareFunc void errSymDump(void);
+LIBCOM_API void errSymTestPrint(long errNum);
+LIBCOM_API int errSymBld(void);
+LIBCOM_API int errSymbolAdd(long errNum, const char *name);
+LIBCOM_API void errSymDump(void);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/error/errlog.c b/modules/libcom/src/error/errlog.c
index 8445a5a..702a157 100644
--- a/modules/libcom/src/error/errlog.c
+++ b/modules/libcom/src/error/errlog.c
@@ -18,7 +18,6 @@
 #include <string.h>
 #include <errno.h>
 
-#define epicsExportSharedSymbols
 #define ERRLOG_INIT
 #include "adjustment.h"
 #include "dbDefs.h"
@@ -39,7 +38,7 @@
 #define MAX_MESSAGE_SIZE 256
 
 /*Declare storage for errVerbose */
-epicsShareDef int errVerbose = 0;
+int errVerbose = 0;
 
 static void errlogExitHandler(void *);
 static void errlogThread(void);
diff --git a/modules/libcom/src/error/errlog.h b/modules/libcom/src/error/errlog.h
index e8a4fb5..d705163 100644
--- a/modules/libcom/src/error/errlog.h
+++ b/modules/libcom/src/error/errlog.h
@@ -14,7 +14,7 @@
 #include <stddef.h>
 #include <stdio.h>
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "compilerDependencies.h"
 
 #ifdef __cplusplus
@@ -30,18 +30,18 @@ typedef enum {
     errlogFatal
 } errlogSevEnum;
 
-epicsShareExtern int errVerbose;
+LIBCOM_API extern int errVerbose;
 
 
 #ifdef ERRLOG_INIT
-    epicsShareDef const char *errlogSevEnumString[] = {
+    const char *errlogSevEnumString[] = {
         "info",
         "minor",
         "major",
         "fatal"
     };
 #else
-    epicsShareExtern const char * errlogSevEnumString[];
+    LIBCOM_API extern const char * errlogSevEnumString[];
 #endif
 
 /* errMessage is a macro so it can get the file and line number */
@@ -51,38 +51,38 @@ epicsShareExtern int errVerbose;
 #define epicsPrintf errlogPrintf
 #define epicsVprintf errlogVprintf
 
-epicsShareFunc int errlogPrintf(const char *pformat, ...)
+LIBCOM_API int errlogPrintf(const char *pformat, ...)
     EPICS_PRINTF_STYLE(1,2);
-epicsShareFunc int errlogVprintf(const char *pformat, va_list pvar);
-epicsShareFunc int errlogSevPrintf(const errlogSevEnum severity,
+LIBCOM_API int errlogVprintf(const char *pformat, va_list pvar);
+LIBCOM_API int errlogSevPrintf(const errlogSevEnum severity,
     const char *pformat, ...) EPICS_PRINTF_STYLE(2,3);
-epicsShareFunc int errlogSevVprintf(const errlogSevEnum severity,
+LIBCOM_API int errlogSevVprintf(const errlogSevEnum severity,
     const char *pformat, va_list pvar);
-epicsShareFunc int errlogMessage(const char *message);
+LIBCOM_API int errlogMessage(const char *message);
 
-epicsShareFunc const char * errlogGetSevEnumString(errlogSevEnum severity);
-epicsShareFunc void errlogSetSevToLog(errlogSevEnum severity);
-epicsShareFunc errlogSevEnum errlogGetSevToLog(void);
+LIBCOM_API const char * errlogGetSevEnumString(errlogSevEnum severity);
+LIBCOM_API void errlogSetSevToLog(errlogSevEnum severity);
+LIBCOM_API errlogSevEnum errlogGetSevToLog(void);
 
-epicsShareFunc void errlogAddListener(errlogListener listener, void *pPrivate);
-epicsShareFunc int errlogRemoveListeners(errlogListener listener,
+LIBCOM_API void errlogAddListener(errlogListener listener, void *pPrivate);
+LIBCOM_API int errlogRemoveListeners(errlogListener listener,
     void *pPrivate);
 
-epicsShareFunc int eltc(int yesno);
-epicsShareFunc int errlogSetConsole(FILE *stream);
+LIBCOM_API int eltc(int yesno);
+LIBCOM_API int errlogSetConsole(FILE *stream);
 
-epicsShareFunc int errlogInit(int bufsize);
-epicsShareFunc int errlogInit2(int bufsize, int maxMsgSize);
-epicsShareFunc void errlogFlush(void);
+LIBCOM_API int errlogInit(int bufsize);
+LIBCOM_API int errlogInit2(int bufsize, int maxMsgSize);
+LIBCOM_API void errlogFlush(void);
 
-epicsShareFunc void errPrintf(long status, const char *pFileName, int lineno,
+LIBCOM_API void errPrintf(long status, const char *pFileName, int lineno,
     const char *pformat, ...) EPICS_PRINTF_STYLE(4,5);
 
-epicsShareFunc int errlogPrintfNoConsole(const char *pformat, ...)
+LIBCOM_API int errlogPrintfNoConsole(const char *pformat, ...)
     EPICS_PRINTF_STYLE(1,2);
-epicsShareFunc int errlogVprintfNoConsole(const char *pformat,va_list pvar);
+LIBCOM_API int errlogVprintfNoConsole(const char *pformat,va_list pvar);
 
-epicsShareFunc void errSymLookup(long status, char *pBuf, size_t bufLength);
+LIBCOM_API void errSymLookup(long status, char *pBuf, size_t bufLength);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/fdmgr/fdManager.cpp b/modules/libcom/src/fdmgr/fdManager.cpp
index 3bbc648..2c30333 100644
--- a/modules/libcom/src/fdmgr/fdManager.cpp
+++ b/modules/libcom/src/fdmgr/fdManager.cpp
@@ -22,7 +22,6 @@
 #include <algorithm>
 
 #define instantiateRecourceLib
-#define epicsExportSharedSymbols
 #include "epicsAssert.h"
 #include "epicsThread.h"
 #include "fdManager.h"
@@ -30,7 +29,7 @@
 
 using std :: max;
 
-epicsShareDef fdManager fileDescriptorManager;
+fdManager fileDescriptorManager;
 
 const unsigned mSecPerSec = 1000u;
 const unsigned uSecPerSec = 1000u * mSecPerSec;
@@ -41,7 +40,7 @@ const unsigned uSecPerSec = 1000u * mSecPerSec;
 // hopefully its a reasonable guess that select() and epicsThreadSleep()
 // will have the same sleep quantum 
 //
-epicsShareFunc fdManager::fdManager () : 
+LIBCOM_API fdManager::fdManager () : 
     sleepQuantum ( epicsThreadSleepQuantum () ), 
         fdSetsPtr ( new fd_set [fdrNEnums] ),
         pTimerQueue ( 0 ), maxFD ( 0 ), processInProg ( false ), 
@@ -58,7 +57,7 @@ epicsShareFunc fdManager::fdManager () :
 //
 // fdManager::~fdManager()
 //
-epicsShareFunc fdManager::~fdManager()
+LIBCOM_API fdManager::~fdManager()
 {
     fdReg   *pReg;
 
@@ -78,7 +77,7 @@ epicsShareFunc fdManager::~fdManager()
 //
 // fdManager::process()
 //
-epicsShareFunc void fdManager::process (double delay)
+LIBCOM_API void fdManager::process (double delay)
 {
     this->lazyInitTimerQueue ();
 
@@ -331,7 +330,7 @@ double fdManager::quantum ()
 //
 // lookUpFD()
 //
-epicsShareFunc fdReg *fdManager::lookUpFD (const SOCKET fd, const fdRegType type)
+LIBCOM_API fdReg *fdManager::lookUpFD (const SOCKET fd, const fdRegType type)
 {
     if (fd<0) {
         return NULL;
diff --git a/modules/libcom/src/fdmgr/fdManager.h b/modules/libcom/src/fdmgr/fdManager.h
index 59a2f35..585c2ef 100644
--- a/modules/libcom/src/fdmgr/fdManager.h
+++ b/modules/libcom/src/fdmgr/fdManager.h
@@ -19,7 +19,7 @@
 #ifndef fdManagerH_included
 #define fdManagerH_included
 
-#include "shareLib.h" // reset share lib defines
+#include "libComAPI.h" // reset share lib defines
 #include "tsDLList.h"
 #include "resourceLib.h"
 #include "epicsTime.h"
@@ -33,7 +33,7 @@ enum fdRegType {fdrRead, fdrWrite, fdrException, fdrNEnums};
 //
 // file descriptor interest id
 //
-class epicsShareClass fdRegId
+class LIBCOM_API fdRegId
 {
 public:
 
@@ -77,12 +77,12 @@ public:
     //
     class fdInterestSubscriptionAlreadyExits {};
 
-    epicsShareFunc fdManager ();
-    epicsShareFunc virtual ~fdManager ();
-    epicsShareFunc void process ( double delay ); // delay parameter is in seconds
+    LIBCOM_API fdManager ();
+    LIBCOM_API virtual ~fdManager ();
+    LIBCOM_API void process ( double delay ); // delay parameter is in seconds
 
     // returns NULL if the fd is unknown
-    epicsShareFunc class fdReg *lookUpFD (const SOCKET fd, const fdRegType type);
+    LIBCOM_API class fdReg *lookUpFD (const SOCKET fd, const fdRegType type);
 
     epicsTimer & createTimer ();
 
@@ -113,14 +113,14 @@ private:
 //
 // default file descriptor manager
 //
-epicsShareExtern fdManager fileDescriptorManager;
+LIBCOM_API extern fdManager fileDescriptorManager;
 
 //
 // fdReg
 //
 // file descriptor registration
 //
-class epicsShareClass fdReg :
+class LIBCOM_API fdReg :
     public fdRegId, public tsDLNode<fdReg>, public tsSLNode<fdReg> {
     friend class fdManager;
 
diff --git a/modules/libcom/src/fdmgr/fdmgr.cpp b/modules/libcom/src/fdmgr/fdmgr.cpp
index 342bae8..86d21bd 100644
--- a/modules/libcom/src/fdmgr/fdmgr.cpp
+++ b/modules/libcom/src/fdmgr/fdmgr.cpp
@@ -22,7 +22,6 @@
 //
 
 #include <stddef.h>
-#define epicsExportSharedSymbols
 #include "locationException.h"
 #include "epicsAssert.h"
 #include "fdManager.h"
@@ -41,14 +40,14 @@ public:
     class noFunctionSpecified {};
     class doubleDelete {};
 
-    epicsShareFunc fdRegForOldFdmgr (const SOCKET fdIn, const fdRegType type, 
+    LIBCOM_API fdRegForOldFdmgr (const SOCKET fdIn, const fdRegType type, 
 		const bool onceOnly, fdManager &manager, pCallBackFDMgr pFunc, void *pParam);
-    epicsShareFunc ~fdRegForOldFdmgr ();
+    LIBCOM_API ~fdRegForOldFdmgr ();
 
 private:
     pCallBackFDMgr pFunc;
     void *pParam;
-	epicsShareFunc virtual void callBack ();
+	LIBCOM_API virtual void callBack ();
 	fdRegForOldFdmgr ( const fdRegForOldFdmgr & );
 	fdRegForOldFdmgr & operator = ( const fdRegForOldFdmgr & );
 };
@@ -60,8 +59,8 @@ class oldFdmgr;
 //
 class timerForOldFdmgr : public epicsTimerNotify, public chronIntIdRes<timerForOldFdmgr> {
 public:
-	epicsShareFunc timerForOldFdmgr (oldFdmgr &fdmgr, double delay, pCallBackFDMgr pFunc, void *pParam);
-	epicsShareFunc virtual ~timerForOldFdmgr ();
+	LIBCOM_API timerForOldFdmgr (oldFdmgr &fdmgr, double delay, pCallBackFDMgr pFunc, void *pParam);
+	LIBCOM_API virtual ~timerForOldFdmgr ();
 
     //
     // exceptions
@@ -74,14 +73,14 @@ private:
     pCallBackFDMgr pFunc;
     void *pParam;
     unsigned id;
-    epicsShareFunc expireStatus expire ( const epicsTime & currentTime );
+    LIBCOM_API expireStatus expire ( const epicsTime & currentTime );
 	timerForOldFdmgr ( const timerForOldFdmgr & );
 	timerForOldFdmgr & operator = ( const timerForOldFdmgr & );
 };
 
 class oldFdmgr : public fdManager {
     friend class timerForOldFdmgr;
-    friend epicsShareFunc int epicsShareAPI fdmgr_clear_timeout (fdctx *pfdctx, fdmgrAlarmId id);
+    friend LIBCOM_API int LIBCOMSTD_API fdmgr_clear_timeout (fdctx *pfdctx, fdmgrAlarmId id);
 
 public:
     oldFdmgr ();
@@ -104,7 +103,7 @@ template class resTable<timerForOldFdmgr, chronIntId>;
 #   pragma warning ( pop )
 #endif
 
-epicsShareFunc fdRegForOldFdmgr::fdRegForOldFdmgr 
+LIBCOM_API fdRegForOldFdmgr::fdRegForOldFdmgr 
     (const SOCKET fdIn, const fdRegType typeIn, 
 	    const bool onceOnlyIn, fdManager &managerIn, 
         pCallBackFDMgr pFuncIn, void *pParamIn) :
@@ -116,14 +115,14 @@ epicsShareFunc fdRegForOldFdmgr::fdRegForOldFdmgr
     }
 }
 
-epicsShareFunc fdRegForOldFdmgr::~fdRegForOldFdmgr ()
+LIBCOM_API fdRegForOldFdmgr::~fdRegForOldFdmgr ()
 {
     if (this->pFunc==NULL) {
         throwWithLocation ( doubleDelete () );
     }
 }
 
-epicsShareFunc void fdRegForOldFdmgr::callBack ()
+LIBCOM_API void fdRegForOldFdmgr::callBack ()
 {
     (*this->pFunc) (this->pParam);
 }
@@ -154,7 +153,7 @@ epicsTimerNotify::expireStatus timerForOldFdmgr::expire ( const epicsTime & )
 
 oldFdmgr::oldFdmgr () {}
 
-extern "C" epicsShareFunc fdctx * epicsShareAPI fdmgr_init (void)
+extern "C" LIBCOM_API fdctx * LIBCOMSTD_API fdmgr_init (void)
 {
     oldFdmgr *pfdm;
 
@@ -169,7 +168,7 @@ extern "C" epicsShareFunc fdctx * epicsShareAPI fdmgr_init (void)
     return (fdctx *) pfdm;
 }
 
-extern "C" epicsShareFunc fdmgrAlarmId epicsShareAPI fdmgr_add_timeout (
+extern "C" LIBCOM_API fdmgrAlarmId LIBCOMSTD_API fdmgr_add_timeout (
     fdctx *pfdctx, struct timeval *ptimeout, pCallBackFDMgr pFunc, void *pParam)
 {
     double delay = ptimeout->tv_sec + ptimeout->tv_usec / static_cast <const double> (uSecPerSec);
@@ -207,7 +206,7 @@ extern "C" epicsShareFunc fdmgrAlarmId epicsShareAPI fdmgr_add_timeout (
     return id;
 }
 
-extern "C" epicsShareFunc int epicsShareAPI fdmgr_clear_timeout (fdctx *pfdctx, fdmgrAlarmId id)
+extern "C" LIBCOM_API int LIBCOMSTD_API fdmgr_clear_timeout (fdctx *pfdctx, fdmgrAlarmId id)
 {
     oldFdmgr *pfdm = static_cast <oldFdmgr *> (pfdctx);
     timerForOldFdmgr *pTimer;
@@ -227,7 +226,7 @@ extern "C" epicsShareFunc int epicsShareAPI fdmgr_clear_timeout (fdctx *pfdctx, 
     return 0;
 }
 
-extern "C" epicsShareFunc int epicsShareAPI fdmgr_add_callback (
+extern "C" LIBCOM_API int LIBCOMSTD_API fdmgr_add_callback (
     fdctx *pfdctx, SOCKET fd, enum fdi_type fdi, pCallBackFDMgr pFunc, void *pParam)
 {
     oldFdmgr *pfdm = static_cast <oldFdmgr *> (pfdctx);
@@ -269,7 +268,7 @@ extern "C" epicsShareFunc int epicsShareAPI fdmgr_add_callback (
     }
 }
  
-extern "C" epicsShareFunc int epicsShareAPI fdmgr_clear_callback (
+extern "C" LIBCOM_API int LIBCOMSTD_API fdmgr_clear_callback (
     fdctx *pfdctx, SOCKET fd, enum fdi_type	fdi)
 {
     oldFdmgr *pfdm = static_cast <oldFdmgr *> (pfdctx);
@@ -296,7 +295,7 @@ extern "C" epicsShareFunc int epicsShareAPI fdmgr_clear_callback (
     }
 }
 
-extern "C" epicsShareFunc int epicsShareAPI fdmgr_pend_event (fdctx *pfdctx, struct timeval *ptimeout)
+extern "C" LIBCOM_API int LIBCOMSTD_API fdmgr_pend_event (fdctx *pfdctx, struct timeval *ptimeout)
 {
     oldFdmgr *pfdm = static_cast <oldFdmgr *> (pfdctx);
     double delay = ptimeout->tv_sec + ptimeout->tv_usec / static_cast <const double> (uSecPerSec);
@@ -311,7 +310,7 @@ extern "C" epicsShareFunc int epicsShareAPI fdmgr_pend_event (fdctx *pfdctx, str
     return 0;
 }
 
-extern "C" epicsShareFunc int epicsShareAPI fdmgr_delete (fdctx *pfdctx)
+extern "C" LIBCOM_API int LIBCOMSTD_API fdmgr_delete (fdctx *pfdctx)
 {
     oldFdmgr *pfdm = static_cast <oldFdmgr *> (pfdctx);
     delete pfdm;
@@ -321,7 +320,7 @@ extern "C" epicsShareFunc int epicsShareAPI fdmgr_delete (fdctx *pfdctx)
 /*
  * depricated interface
  */
-extern "C" epicsShareFunc int epicsShareAPI fdmgr_clear_fd (fdctx *pfdctx, SOCKET fd)
+extern "C" LIBCOM_API int LIBCOMSTD_API fdmgr_clear_fd (fdctx *pfdctx, SOCKET fd)
 {
 	return fdmgr_clear_callback(pfdctx, fd, fdi_read);
 }
@@ -329,7 +328,7 @@ extern "C" epicsShareFunc int epicsShareAPI fdmgr_clear_fd (fdctx *pfdctx, SOCKE
 /*
  * depricated interface
  */
-extern "C" epicsShareFunc int epicsShareAPI fdmgr_add_fd ( 
+extern "C" LIBCOM_API int LIBCOMSTD_API fdmgr_add_fd ( 
     fdctx   *pfdctx, SOCKET  fd, void (*pfunc)(void *pParam), void *param)
 {
 	return fdmgr_add_callback (pfdctx, fd, fdi_read, pfunc, param);
diff --git a/modules/libcom/src/fdmgr/fdmgr.h b/modules/libcom/src/fdmgr/fdmgr.h
index a227335..318120e 100644
--- a/modules/libcom/src/fdmgr/fdmgr.h
+++ b/modules/libcom/src/fdmgr/fdmgr.h
@@ -24,7 +24,7 @@
 #include "bucketLib.h"
 #include "osiSock.h"
 #include "epicsThread.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -65,7 +65,7 @@ typedef unsigned fdmgrAlarmId;
  * Initialize a file descriptor manager session
  *
  */
-epicsShareFunc fdctx * epicsShareAPI fdmgr_init(void);
+LIBCOM_API fdctx * LIBCOMSTD_API fdmgr_init(void);
 
 /*
  * Specify a function to be called with a specified parameter
@@ -74,7 +74,7 @@ epicsShareFunc fdctx * epicsShareAPI fdmgr_init(void);
  * Returns fdmgrNoAlarm (zero) if alarm cant be created
  */
 #define fdmgrNoAlarm 0
-epicsShareFunc fdmgrAlarmId epicsShareAPI fdmgr_add_timeout(
+LIBCOM_API fdmgrAlarmId LIBCOMSTD_API fdmgr_add_timeout(
 fdctx           *pfdctx,	/* fd mgr ctx from fdmgr_init()		*/
 struct timeval  *ptimeout,	/* relative delay from current time	*/
 pCallBackFDMgr  pfunc,		/* function (handler) to call 		*/
@@ -85,7 +85,7 @@ void            *param		/* first parameter passed to the func	*/
  * Clear a timeout which has not executed its function (handler)
  * yet.
  */
-epicsShareFunc int epicsShareAPI fdmgr_clear_timeout(
+LIBCOM_API int LIBCOMSTD_API fdmgr_clear_timeout(
 fdctx           *pfdctx,	/* fd mgr ctx from fdmgr_init() 	*/
 fdmgrAlarmId	id		/* alarm to delete                      */
 );
@@ -107,7 +107,7 @@ fdmgrAlarmId	id		/* alarm to delete                      */
  * fdmgr_add_callback()
  * 
  */
-epicsShareFunc int epicsShareAPI fdmgr_add_callback(
+LIBCOM_API int LIBCOMSTD_API fdmgr_add_callback(
 fdctx *pfdctx,			/* fd mgr ctx from fdmgr_init() 	*/
 SOCKET fd,				/* file descriptor			*/
 enum fdi_type fdi,		/* file descriptor interest type	*/	
@@ -120,7 +120,7 @@ void *param				/* first parameter passed to the func   */
  * Clear nterest in a type of file descriptor activity (IO).
  *
  */ 
-epicsShareFunc int epicsShareAPI fdmgr_clear_callback(
+LIBCOM_API int LIBCOMSTD_API fdmgr_clear_callback(
 fdctx			*pfdctx,	/* fd mgr ctx from fdmgr_init() 	*/
 SOCKET		fd,		/* file descriptor                      */
 enum fdi_type	fdi		/* file descriptor interest type        */
@@ -135,7 +135,7 @@ enum fdi_type	fdi		/* file descriptor interest type        */
  * enough. 
  *
  */
-epicsShareFunc int epicsShareAPI fdmgr_pend_event(
+LIBCOM_API int LIBCOMSTD_API fdmgr_pend_event(
 fdctx		*pfdctx,	/* fd mgr ctx from fdmgr_init() */
 struct timeval	*ptimeout
 );
@@ -144,7 +144,7 @@ struct timeval	*ptimeout
 /*
  * obsolete interface
  */
-epicsShareFunc int epicsShareAPI fdmgr_clear_fd(
+LIBCOM_API int LIBCOMSTD_API fdmgr_clear_fd(
 fdctx		*pfdctx,		/* fd mgr ctx from fdmgr_init() */
 SOCKET	fd
 );
@@ -152,14 +152,14 @@ SOCKET	fd
 /*
  * obsolete interface
  */
-epicsShareFunc int epicsShareAPI fdmgr_add_fd(
+LIBCOM_API int LIBCOMSTD_API fdmgr_add_fd(
 fdctx   *pfdctx,		/* fd mgr ctx from fdmgr_init() */
 SOCKET  fd,
 pCallBackFDMgr pfunc,		/* function (handler) to call 		*/
 void    *param
 );
 
-epicsShareFunc int epicsShareAPI fdmgr_delete(fdctx *pfdctx);
+LIBCOM_API int LIBCOMSTD_API fdmgr_delete(fdctx *pfdctx);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/flex/Makefile b/modules/libcom/src/flex/Makefile
index 20cce5d..617c1c9 100644
--- a/modules/libcom/src/flex/Makefile
+++ b/modules/libcom/src/flex/Makefile
@@ -29,7 +29,7 @@ e_flex_SRCS += nfa.c
 e_flex_SRCS += sym.c
 e_flex_SRCS += tblcmp.c
 e_flex_SRCS += parse.c
-e_flex_OBJS += epicsTempFile$(OBJ)
+e_flex_OBJS += epicsTempFilex$(OBJ)
 
 PROD_HOST += e_flex
 
diff --git a/modules/libcom/src/flex/flex.c b/modules/libcom/src/flex/flex.c
index 008e5e6..faf61ed 100644
--- a/modules/libcom/src/flex/flex.c
+++ b/modules/libcom/src/flex/flex.c
@@ -43,7 +43,6 @@ char copyright[] =
 #endif /* not lint */
 
 
-#define epicsExportSharedSymbols
 #include "epicsTempFile.h"
 #undef epicsExportSharedSymbols
 
diff --git a/modules/libcom/src/freeList/freeList.h b/modules/libcom/src/freeList/freeList.h
index 77ebfb8..7fced89 100644
--- a/modules/libcom/src/freeList/freeList.h
+++ b/modules/libcom/src/freeList/freeList.h
@@ -13,18 +13,18 @@
 #define INCfreeListh
 
 #include <stddef.h>
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-epicsShareFunc void epicsShareAPI freeListInitPvt(void **ppvt,int size,int nmalloc);
-epicsShareFunc void * epicsShareAPI freeListCalloc(void *pvt);
-epicsShareFunc void * epicsShareAPI freeListMalloc(void *pvt);
-epicsShareFunc void epicsShareAPI freeListFree(void *pvt,void*pmem);
-epicsShareFunc void epicsShareAPI freeListCleanup(void *pvt);
-epicsShareFunc size_t epicsShareAPI freeListItemsAvail(void *pvt);
+LIBCOM_API void LIBCOMSTD_API freeListInitPvt(void **ppvt,int size,int nmalloc);
+LIBCOM_API void * LIBCOMSTD_API freeListCalloc(void *pvt);
+LIBCOM_API void * LIBCOMSTD_API freeListMalloc(void *pvt);
+LIBCOM_API void LIBCOMSTD_API freeListFree(void *pvt,void*pmem);
+LIBCOM_API void LIBCOMSTD_API freeListCleanup(void *pvt);
+LIBCOM_API size_t LIBCOMSTD_API freeListItemsAvail(void *pvt);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/freeList/freeListLib.c b/modules/libcom/src/freeList/freeListLib.c
index b489a47..9038947 100755
--- a/modules/libcom/src/freeList/freeListLib.c
+++ b/modules/libcom/src/freeList/freeListLib.c
@@ -22,7 +22,6 @@
 #define REDZONE 0
 #endif
 
-#define epicsExportSharedSymbols
 #include "cantProceed.h"
 #include "epicsMutex.h"
 #include "freeList.h"
@@ -41,7 +40,7 @@ typedef struct {
     epicsMutexId lock;
 }FREELISTPVT;
 
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
 	freeListInitPvt(void **ppvt,int size,int nmalloc)
 {
     FREELISTPVT	*pfl;
@@ -58,7 +57,7 @@ epicsShareFunc void epicsShareAPI
     return;
 }
 
-epicsShareFunc void * epicsShareAPI freeListCalloc(void *pvt)
+LIBCOM_API void * LIBCOMSTD_API freeListCalloc(void *pvt)
 {
     FREELISTPVT *pfl = pvt;
 #   ifdef EPICS_FREELIST_DEBUG
@@ -72,7 +71,7 @@ epicsShareFunc void * epicsShareAPI freeListCalloc(void *pvt)
 #   endif
 }
 
-epicsShareFunc void * epicsShareAPI freeListMalloc(void *pvt)
+LIBCOM_API void * LIBCOMSTD_API freeListMalloc(void *pvt)
 {
     FREELISTPVT *pfl = pvt;
 #   ifdef EPICS_FREELIST_DEBUG
@@ -129,7 +128,7 @@ epicsShareFunc void * epicsShareAPI freeListMalloc(void *pvt)
 #   endif
 }
 
-epicsShareFunc void epicsShareAPI freeListFree(void *pvt,void*pmem)
+LIBCOM_API void LIBCOMSTD_API freeListFree(void *pvt,void*pmem)
 {
     FREELISTPVT	*pfl = pvt;
 #   ifdef EPICS_FREELIST_DEBUG
@@ -150,7 +149,7 @@ epicsShareFunc void epicsShareAPI freeListFree(void *pvt,void*pmem)
 #   endif
 }
 
-epicsShareFunc void epicsShareAPI freeListCleanup(void *pvt)
+LIBCOM_API void LIBCOMSTD_API freeListCleanup(void *pvt)
 {
     FREELISTPVT *pfl = pvt;
     allocMem	*phead;
@@ -169,7 +168,7 @@ epicsShareFunc void epicsShareAPI freeListCleanup(void *pvt)
     free(pvt);
 }
 
-epicsShareFunc size_t epicsShareAPI freeListItemsAvail(void *pvt)
+LIBCOM_API size_t LIBCOMSTD_API freeListItemsAvail(void *pvt)
 {
     FREELISTPVT *pfl = pvt;
     size_t nBlocksAvailable;
diff --git a/modules/libcom/src/gpHash/gpHash.h b/modules/libcom/src/gpHash/gpHash.h
index d9c0dd2..43c57f1 100644
--- a/modules/libcom/src/gpHash/gpHash.h
+++ b/modules/libcom/src/gpHash/gpHash.h
@@ -14,7 +14,7 @@
 #ifndef INC_gpHash_H
 #define INC_gpHash_H
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #include "ellLib.h"
 
@@ -32,19 +32,19 @@ extern "C" {
 #endif
 
 /*tableSize must be power of 2 in range 256 to 65536*/
-epicsShareFunc void epicsShareAPI
+LIBCOM_API void LIBCOMSTD_API
     gphInitPvt(struct gphPvt **ppvt, int tableSize);
-epicsShareFunc GPHENTRY * epicsShareAPI
+LIBCOM_API GPHENTRY * LIBCOMSTD_API
     gphFind(struct gphPvt *pvt, const char *name, void *pvtid);
-epicsShareFunc GPHENTRY * epicsShareAPI
+LIBCOM_API GPHENTRY * LIBCOMSTD_API
     gphFindParse(struct gphPvt *pvt, const char *name, size_t len, void *pvtid);
-epicsShareFunc GPHENTRY * epicsShareAPI
+LIBCOM_API GPHENTRY * LIBCOMSTD_API
     gphAdd(struct gphPvt *pvt, const char *name, void *pvtid);
-epicsShareFunc void epicsShareAPI
+LIBCOM_API void LIBCOMSTD_API
     gphDelete(struct gphPvt *pvt, const char *name, void *pvtid);
-epicsShareFunc void epicsShareAPI gphFreeMem(struct gphPvt *pvt);
-epicsShareFunc void epicsShareAPI gphDump(struct gphPvt *pvt);
-epicsShareFunc void epicsShareAPI gphDumpFP(FILE *fp, struct gphPvt *pvt);
+LIBCOM_API void LIBCOMSTD_API gphFreeMem(struct gphPvt *pvt);
+LIBCOM_API void LIBCOMSTD_API gphDump(struct gphPvt *pvt);
+LIBCOM_API void LIBCOMSTD_API gphDumpFP(FILE *fp, struct gphPvt *pvt);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/gpHash/gpHashLib.c b/modules/libcom/src/gpHash/gpHashLib.c
index a56f00a..d111e9e 100644
--- a/modules/libcom/src/gpHash/gpHashLib.c
+++ b/modules/libcom/src/gpHash/gpHashLib.c
@@ -13,7 +13,6 @@
 #include <stdlib.h>
 #include <stddef.h>
 
-#define epicsExportSharedSymbols
 #include "cantProceed.h"
 #include "epicsMutex.h"
 #include "epicsStdioRedirect.h"
@@ -35,7 +34,7 @@ typedef struct gphPvt {
 #define MAX_SIZE 65536
 
 
-void epicsShareAPI gphInitPvt(gphPvt **ppvt, int size)
+void LIBCOMSTD_API gphInitPvt(gphPvt **ppvt, int size)
 {
     gphPvt *pgphPvt;
 
@@ -59,7 +58,7 @@ void epicsShareAPI gphInitPvt(gphPvt **ppvt, int size)
     return;
 }
 
-GPHENTRY * epicsShareAPI gphFindParse(gphPvt *pgphPvt, const char *name, size_t len, void *pvtid)
+GPHENTRY * LIBCOMSTD_API gphFindParse(gphPvt *pgphPvt, const char *name, size_t len, void *pvtid)
 {
     ELLLIST **paplist;
     ELLLIST *gphlist;
@@ -90,12 +89,12 @@ GPHENTRY * epicsShareAPI gphFindParse(gphPvt *pgphPvt, const char *name, size_t 
     return pgphNode;
 }
 
-GPHENTRY * epicsShareAPI gphFind(gphPvt *pgphPvt, const char *name, void *pvtid)
+GPHENTRY * LIBCOMSTD_API gphFind(gphPvt *pgphPvt, const char *name, void *pvtid)
 {
     return gphFindParse(pgphPvt, name, strlen(name), pvtid);
 }
 
-GPHENTRY * epicsShareAPI gphAdd(gphPvt *pgphPvt, const char *name, void *pvtid)
+GPHENTRY * LIBCOMSTD_API gphAdd(gphPvt *pgphPvt, const char *name, void *pvtid)
 {
     ELLLIST **paplist;
     ELLLIST *plist;
@@ -140,7 +139,7 @@ GPHENTRY * epicsShareAPI gphAdd(gphPvt *pgphPvt, const char *name, void *pvtid)
     return (pgphNode);
 }
 
-void epicsShareAPI gphDelete(gphPvt *pgphPvt, const char *name, void *pvtid)
+void LIBCOMSTD_API gphDelete(gphPvt *pgphPvt, const char *name, void *pvtid)
 {
     ELLLIST **paplist;
     ELLLIST *plist = NULL;
@@ -174,7 +173,7 @@ void epicsShareAPI gphDelete(gphPvt *pgphPvt, const char *name, void *pvtid)
     return;
 }
 
-void epicsShareAPI gphFreeMem(gphPvt *pgphPvt)
+void LIBCOMSTD_API gphFreeMem(gphPvt *pgphPvt)
 {
     ELLLIST **paplist;
     int h;
@@ -204,12 +203,12 @@ void epicsShareAPI gphFreeMem(gphPvt *pgphPvt)
     free(pgphPvt);
 }
 
-void epicsShareAPI gphDump(gphPvt *pgphPvt)
+void LIBCOMSTD_API gphDump(gphPvt *pgphPvt)
 {
     gphDumpFP(stdout, pgphPvt);
 }
 
-void epicsShareAPI gphDumpFP(FILE *fp, gphPvt *pgphPvt)
+void LIBCOMSTD_API gphDumpFP(FILE *fp, gphPvt *pgphPvt)
 {
     unsigned int empty = 0;
     ELLLIST **paplist;
diff --git a/modules/libcom/src/iocsh/initHooks.c b/modules/libcom/src/iocsh/initHooks.c
index 0884bdd..4c955af 100644
--- a/modules/libcom/src/iocsh/initHooks.c
+++ b/modules/libcom/src/iocsh/initHooks.c
@@ -16,7 +16,6 @@
 #include <stddef.h>
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "dbDefs.h"
 #include "ellLib.h"
 #include "epicsMutex.h"
diff --git a/modules/libcom/src/iocsh/initHooks.h b/modules/libcom/src/iocsh/initHooks.h
index 429a768..cedfafb 100644
--- a/modules/libcom/src/iocsh/initHooks.h
+++ b/modules/libcom/src/iocsh/initHooks.h
@@ -15,7 +15,7 @@
 #ifndef INC_initHooks_H
 #define INC_initHooks_H
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -56,10 +56,10 @@ typedef enum {
 } initHookState;
 
 typedef void (*initHookFunction)(initHookState state);
-epicsShareFunc int initHookRegister(initHookFunction func);
-epicsShareFunc void initHookAnnounce(initHookState state);
-epicsShareFunc const char *initHookName(int state);
-epicsShareFunc void initHookFree(void);
+LIBCOM_API int initHookRegister(initHookFunction func);
+LIBCOM_API void initHookAnnounce(initHookState state);
+LIBCOM_API const char *initHookName(int state);
+LIBCOM_API void initHookFree(void);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/iocsh/iocsh.cpp b/modules/libcom/src/iocsh/iocsh.cpp
index 8e4d365..2d2f053 100644
--- a/modules/libcom/src/iocsh/iocsh.cpp
+++ b/modules/libcom/src/iocsh/iocsh.cpp
@@ -19,7 +19,6 @@
 #include <ctype.h>
 #include <errno.h>
 
-#define epicsExportSharedSymbols
 #include "epicsMath.h"
 #include "errlog.h"
 #include "macLib.h"
@@ -39,7 +38,7 @@ extern "C" {
 /*
  * Global link to pdbbase
  */
-epicsShareDef struct dbBase **iocshPpdbbase;
+struct dbBase **iocshPpdbbase;
 
 /*
  * File-local information
@@ -109,7 +108,7 @@ iocshTableUnlock (void)
 /*
  * Register a command
  */
-void epicsShareAPI iocshRegister (const iocshFuncDef *piocshFuncDef,
+void LIBCOMSTD_API iocshRegister (const iocshFuncDef *piocshFuncDef,
     iocshCallFunc func)
 {
     struct iocshCommand *l, *p, *n;
@@ -152,7 +151,7 @@ void epicsShareAPI iocshRegister (const iocshFuncDef *piocshFuncDef,
 /*
  * Retrieves a previously registered function with the given name.
  */
-const iocshCmdDef * epicsShareAPI iocshFindCommand(const char *name)
+const iocshCmdDef * LIBCOMSTD_API iocshFindCommand(const char *name)
 {
     return (iocshCmdDef *) registryFind(iocshCmdID, name);
 }
@@ -165,7 +164,7 @@ static const iocshArg varCmdArg1 = { "[value]]", iocshArgString};
 static const iocshArg *varCmdArgs[2] = {&varCmdArg0, &varCmdArg1};
 static const iocshFuncDef varFuncDef = {"var", 2, varCmdArgs};
 
-void epicsShareAPI iocshRegisterVariable (const iocshVarDef *piocshVarDef)
+void LIBCOMSTD_API iocshRegisterVariable (const iocshVarDef *piocshVarDef)
 {
     struct iocshVariable *l, *p, *n;
     int i;
@@ -220,7 +219,7 @@ void epicsShareAPI iocshRegisterVariable (const iocshVarDef *piocshVarDef)
 /*
  * Retrieves a previously registered variable with the given name.
  */
-const iocshVarDef * epicsShareAPI iocshFindVariable(const char *name)
+const iocshVarDef * LIBCOMSTD_API iocshFindVariable(const char *name)
 {
     struct iocshVariable *temp = (iocshVariable *) registryFind(iocshVarID, name);
     return temp ? temp->pVarDef : 0;
@@ -229,7 +228,7 @@ const iocshVarDef * epicsShareAPI iocshFindVariable(const char *name)
 /*
  * Free storage created by iocshRegister/iocshRegisterVariable
  */
-void epicsShareAPI iocshFree(void) 
+void LIBCOMSTD_API iocshFree(void) 
 {
     struct iocshCommand *pc;
     struct iocshVariable *pv;
@@ -995,19 +994,19 @@ iocshBody (const char *pathname, const char *commandLine, const char *macros)
 /*
  * External access to the command interpreter
  */
-int epicsShareAPI
+int LIBCOMSTD_API
 iocsh (const char *pathname)
 {
     return iocshLoad(pathname, NULL);
 }
 
-int epicsShareAPI
+int LIBCOMSTD_API
 iocshCmd (const char *cmd)
 {
     return iocshRun(cmd, NULL);
 }
 
-int epicsShareAPI
+int LIBCOMSTD_API
 iocshLoad(const char *pathname, const char *macros)
 {
     if (pathname)
@@ -1015,7 +1014,7 @@ iocshLoad(const char *pathname, const char *macros)
     return iocshBody(pathname, NULL, macros);
 }
 
-int epicsShareAPI
+int LIBCOMSTD_API
 iocshRun(const char *cmd, const char *macros)
 {
     if (cmd == NULL)
@@ -1038,7 +1037,7 @@ iocshRun(const char *cmd, const char *macros)
  * and update the shared MAC_HANDLE that the iocsh uses. Which is
  * what this function is provided for.
  */
-void epicsShareAPI
+void LIBCOMSTD_API
 iocshEnvClear(const char *name)
 {
     iocshContext *context;
diff --git a/modules/libcom/src/iocsh/iocsh.h b/modules/libcom/src/iocsh/iocsh.h
index a63af64..fdb7f7c 100644
--- a/modules/libcom/src/iocsh/iocsh.h
+++ b/modules/libcom/src/iocsh/iocsh.h
@@ -15,7 +15,7 @@
 
 #include <stdio.h>
 #include "compilerDependencies.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #if defined(vxWorks) || defined(__rtems__)
 #define IOCSH_STATIC_FUNC
@@ -71,48 +71,48 @@ typedef struct iocshCmdDef {
     iocshCallFunc         func;
 }iocshCmdDef;
 
-epicsShareFunc void epicsShareAPI iocshRegister(
+LIBCOM_API void LIBCOMSTD_API iocshRegister(
     const iocshFuncDef *piocshFuncDef, iocshCallFunc func);
-epicsShareFunc void epicsShareAPI iocshRegisterVariable (
+LIBCOM_API void LIBCOMSTD_API iocshRegisterVariable (
     const iocshVarDef *piocshVarDef);
-epicsShareFunc const iocshCmdDef * epicsShareAPI iocshFindCommand(
+LIBCOM_API const iocshCmdDef * LIBCOMSTD_API iocshFindCommand(
     const char* name) EPICS_DEPRECATED;
-epicsShareFunc const iocshVarDef * epicsShareAPI iocshFindVariable(
+LIBCOM_API const iocshVarDef * LIBCOMSTD_API iocshFindVariable(
     const char* name);
 
 /* iocshFree frees storage used by iocshRegister*/
 /* This should only be called when iocsh is no longer needed*/
-epicsShareFunc void epicsShareAPI iocshFree(void);
+LIBCOM_API void LIBCOMSTD_API iocshFree(void);
 
 /** shorthand for @code iocshLoad(pathname, NULL) @endcode */
-epicsShareFunc int epicsShareAPI iocsh(const char *pathname);
+LIBCOM_API int LIBCOMSTD_API iocsh(const char *pathname);
 /** shorthand for @code iocshRun(cmd, NULL) @endcode */
-epicsShareFunc int epicsShareAPI iocshCmd(const char *cmd);
+LIBCOM_API int LIBCOMSTD_API iocshCmd(const char *cmd);
 /** Read and evaluate IOC shell commands from the given file.
  * @param pathname Path to script file
  * @param macros NULL or a comma seperated list of macro definitions.  eg. "VAR1=x,VAR2=y"
  * @return 0 on success, non-zero on error
  */
-epicsShareFunc int epicsShareAPI iocshLoad(const char *pathname, const char* macros);
+LIBCOM_API int LIBCOMSTD_API iocshLoad(const char *pathname, const char* macros);
 /** Evaluate a single IOC shell command
  * @param cmd Command string.  eg. "echo \"something or other\""
  * @param macros NULL or a comma seperated list of macro definitions.  eg. "VAR1=x,VAR2=y"
  * @return 0 on success, non-zero on error
  */
-epicsShareFunc int epicsShareAPI iocshRun(const char *cmd, const char* macros);
+LIBCOM_API int LIBCOMSTD_API iocshRun(const char *cmd, const char* macros);
 
 /** @brief Signal error from an IOC shell function.
  *
  * @param err 0 - success (no op), !=0 - error
  * @return The err argument value.
  */
-epicsShareFunc int iocshSetError(int err);
+LIBCOM_API int iocshSetError(int err);
 
 /* Makes macros that shadow environment variables work correctly with epicsEnvSet */
-epicsShareFunc void epicsShareAPI iocshEnvClear(const char *name);
+LIBCOM_API void LIBCOMSTD_API iocshEnvClear(const char *name);
 
 /* 'weak' link to pdbbase */
-epicsShareExtern struct dbBase **iocshPpdbbase;
+LIBCOM_API extern struct dbBase **iocshPpdbbase;
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/iocsh/libComRegister.c b/modules/libcom/src/iocsh/libComRegister.c
index c67804a..e58feb4 100644
--- a/modules/libcom/src/iocsh/libComRegister.c
+++ b/modules/libcom/src/iocsh/libComRegister.c
@@ -10,7 +10,6 @@
 
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include "iocsh.h"
 #include "asLib.h"
 #include "epicsStdioRedirect.h"
@@ -396,7 +395,7 @@ static void installLastResortEventProviderCallFunc(const iocshArgBuf *args)
 
 static iocshVarDef asCheckClientIPDef[] = { { "asCheckClientIP", iocshArgInt, 0 }, { NULL, iocshArgInt, NULL } };
 
-void epicsShareAPI libComRegister(void)
+void LIBCOMSTD_API libComRegister(void)
 {
     iocshRegister(&dateFuncDef, dateCallFunc);
     iocshRegister(&echoFuncDef, echoCallFunc);
diff --git a/modules/libcom/src/iocsh/libComRegister.h b/modules/libcom/src/iocsh/libComRegister.h
index ef93f4a..faf2801 100644
--- a/modules/libcom/src/iocsh/libComRegister.h
+++ b/modules/libcom/src/iocsh/libComRegister.h
@@ -8,13 +8,13 @@
 #ifndef INC_libComRegister_H
 #define INC_libComRegister_H
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-epicsShareFunc void epicsShareAPI libComRegister(void);
+LIBCOM_API void LIBCOMSTD_API libComRegister(void);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/iocsh/registry.c b/modules/libcom/src/iocsh/registry.c
index 0b2e312..dfc8c2c 100644
--- a/modules/libcom/src/iocsh/registry.c
+++ b/modules/libcom/src/iocsh/registry.c
@@ -16,7 +16,6 @@
 #include <string.h>
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "dbDefs.h"
 #include "cantProceed.h"
 #include "epicsFindSymbol.h"
@@ -32,7 +31,7 @@ static void registryInit(int tableSize)
     if(!gphPvt) cantProceed("registry why did gphInitPvt fail\n");
 }
     
-epicsShareFunc int epicsShareAPI registrySetTableSize(int size)
+LIBCOM_API int LIBCOMSTD_API registrySetTableSize(int size)
 {
     if(gphPvt) {
         printf("registryInit already called\n");
@@ -43,7 +42,7 @@ epicsShareFunc int epicsShareAPI registrySetTableSize(int size)
 }
     
 
-epicsShareFunc int epicsShareAPI registryAdd(
+LIBCOM_API int LIBCOMSTD_API registryAdd(
     void *registryID,const char *name,void *data)
 {
     GPHENTRY *pentry;
@@ -54,7 +53,7 @@ epicsShareFunc int epicsShareAPI registryAdd(
     return(TRUE);
 }
 
-epicsShareFunc int epicsShareAPI registryChange(
+LIBCOM_API int LIBCOMSTD_API registryChange(
     void *registryID,const char *name,void *data)
 {
     GPHENTRY *pentry;
@@ -65,7 +64,7 @@ epicsShareFunc int epicsShareAPI registryChange(
     return(TRUE);
 }
 
-epicsShareFunc void * epicsShareAPI registryFind(
+LIBCOM_API void * LIBCOMSTD_API registryFind(
     void *registryID,const char *name)
 {
     GPHENTRY *pentry;
@@ -77,14 +76,14 @@ epicsShareFunc void * epicsShareAPI registryFind(
     return(pentry->userPvt);
 }
 
-epicsShareFunc void epicsShareAPI registryFree(void)
+LIBCOM_API void LIBCOMSTD_API registryFree(void)
 {
     if(!gphPvt) return;
     gphFreeMem(gphPvt);
     gphPvt = 0;
 }
 
-epicsShareFunc int epicsShareAPI registryDump(void)
+LIBCOM_API int LIBCOMSTD_API registryDump(void)
 {
     if(!gphPvt) return(0);
     gphDump(gphPvt);
diff --git a/modules/libcom/src/iocsh/registry.h b/modules/libcom/src/iocsh/registry.h
index ea1bb7c..0739783 100644
--- a/modules/libcom/src/iocsh/registry.h
+++ b/modules/libcom/src/iocsh/registry.h
@@ -10,23 +10,23 @@
 #ifndef INCregistryh
 #define INCregistryh
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 #define DEFAULT_TABLE_SIZE 1024
 
-epicsShareFunc int epicsShareAPI registryAdd(
+LIBCOM_API int LIBCOMSTD_API registryAdd(
     void *registryID,const char *name,void *data);
-epicsShareFunc void *epicsShareAPI registryFind(
+LIBCOM_API void *LIBCOMSTD_API registryFind(
     void *registryID,const char *name);
-epicsShareFunc int epicsShareAPI registryChange(
+LIBCOM_API int LIBCOMSTD_API registryChange(
     void *registryID,const char *name,void *data);
 
-epicsShareFunc int epicsShareAPI registrySetTableSize(int size);
-epicsShareFunc void epicsShareAPI registryFree(void);
-epicsShareFunc int epicsShareAPI registryDump(void);
+LIBCOM_API int LIBCOMSTD_API registrySetTableSize(int size);
+LIBCOM_API void LIBCOMSTD_API registryFree(void);
+LIBCOM_API int LIBCOMSTD_API registryDump(void);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/libComAPI.h b/modules/libcom/src/libComAPI.h
new file mode 100644
index 0000000..949fd17
--- /dev/null
+++ b/modules/libcom/src/libComAPI.h
@@ -0,0 +1,32 @@
+#ifndef LIBCOMAPI_H
+#define LIBCOMAPI_H
+
+#if defined(_WIN32) || defined(__CYGWIN__)
+#   define LIBCOMSTD_API __stdcall
+
+#  if defined(LIBCOM_API_BUILDING) && defined(EPICS_BUILD_DLL)
+/* building library as dll */
+#    define LIBCOM_API __declspec(dllexport)
+#  elif !defined(LIBCOM_API_BUILDING) && defined(EPICS_CALL_DLL)
+/* calling library in dll form */
+#    define LIBCOM_API __declspec(dllimport)
+#  endif
+
+#elif __GNUC__ >= 4
+#  define LIBCOM_API __attribute__ ((visibility("default")))
+#endif
+
+#if !defined(LIBCOM_API)
+#  define LIBCOM_API
+#endif
+
+#if !defined(LIBCOMSTD_API)
+#  define LIBCOMSTD_API
+#endif
+
+/* workaround for unfortunately ubiquitous example
+ * to workaround ordering issues...
+ */
+#include <shareLib.h>
+
+#endif /* LIBCOMAPI_H */
diff --git a/modules/libcom/src/libComVersion.h b/modules/libcom/src/libComVersion.h
index 60537f9..02a124d 100644
--- a/modules/libcom/src/libComVersion.h
+++ b/modules/libcom/src/libComVersion.h
@@ -9,7 +9,7 @@
 #define LIBCOMVERSION_H
 
 #include <epicsVersion.h>
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #ifndef VERSION_INT
 #  define VERSION_INT(V,R,M,P) ( ((V)<<24) | ((R)<<16) | ((M)<<8) | (P))
diff --git a/modules/libcom/src/log/iocLog.c b/modules/libcom/src/log/iocLog.c
index ba78041..34a0f94 100644
--- a/modules/libcom/src/log/iocLog.c
+++ b/modules/libcom/src/log/iocLog.c
@@ -16,7 +16,6 @@
 #include <stdio.h>
 #include <limits.h>
 
-#define epicsExportSharedSymbols
 #include "envDefs.h"
 #include "errlog.h"
 #include "logClient.h"
@@ -69,7 +68,7 @@ static int getConfig (struct in_addr *pserver_addr, unsigned short *pserver_port
 /*
  *  iocLogFlush ()
  */
-void epicsShareAPI epicsShareAPI iocLogFlush (void)
+void LIBCOMSTD_API LIBCOMSTD_API iocLogFlush (void)
 {
     if (iocLogClient!=NULL) {
         logClientFlush (iocLogClient);
@@ -119,7 +118,7 @@ static logClientId iocLogClientInit (void)
 /*
  *  iocLogInit()
  */
-int epicsShareAPI iocLogInit (void)
+int LIBCOMSTD_API iocLogInit (void)
 {
     /*
      * check for global disable
@@ -145,7 +144,7 @@ int epicsShareAPI iocLogInit (void)
 /*
  *  iocLogShow ()
  */
-void epicsShareAPI iocLogShow (unsigned level)
+void LIBCOMSTD_API iocLogShow (unsigned level)
 {
     if (iocLogClient!=NULL) {
         logClientShow (iocLogClient, level);
@@ -155,7 +154,7 @@ void epicsShareAPI iocLogShow (unsigned level)
 /*
  *  logClientInit(); deprecated
  */
-logClientId epicsShareAPI logClientInit (void)
+logClientId LIBCOMSTD_API logClientInit (void)
 {
     return iocLogClientInit ();
 }
diff --git a/modules/libcom/src/log/iocLog.h b/modules/libcom/src/log/iocLog.h
index b6f7ddf..4a59c2b 100644
--- a/modules/libcom/src/log/iocLog.h
+++ b/modules/libcom/src/log/iocLog.h
@@ -17,7 +17,7 @@
 
 #ifndef INCiocLogh
 #define INCiocLogh 1
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -26,10 +26,10 @@ extern "C" {
 /*
  * ioc log client interface
  */
-epicsShareExtern int iocLogDisable;
-epicsShareFunc int epicsShareAPI iocLogInit (void);
-epicsShareFunc void epicsShareAPI iocLogShow (unsigned level);
-epicsShareFunc void epicsShareAPI iocLogFlush (void);
+LIBCOM_API extern int iocLogDisable;
+LIBCOM_API int LIBCOMSTD_API iocLogInit (void);
+LIBCOM_API void LIBCOMSTD_API iocLogShow (unsigned level);
+LIBCOM_API void LIBCOMSTD_API iocLogFlush (void);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/log/iocLogServer.c b/modules/libcom/src/log/iocLogServer.c
index e707185..7da450a 100644
--- a/modules/libcom/src/log/iocLogServer.c
+++ b/modules/libcom/src/log/iocLogServer.c
@@ -16,6 +16,9 @@
  *      Date:       080791 
  */
 
+#undef LIBCOM_API_BUILDING
+#undef EPICS_BUILD_DLL
+
 #include	<stdlib.h>
 #include	<string.h>
 #include	<errno.h>
diff --git a/modules/libcom/src/log/logClient.c b/modules/libcom/src/log/logClient.c
index 44883e3..0209550 100644
--- a/modules/libcom/src/log/logClient.c
+++ b/modules/libcom/src/log/logClient.c
@@ -22,7 +22,6 @@
 #include <stdio.h>
 
 #define EPICS_PRIVATE_API
-#define epicsExportSharedSymbols
 #include "dbDefs.h"
 #include "epicsEvent.h"
 #include "iocLog.h"
@@ -200,7 +199,7 @@ static void sendMessageChunk(logClient * pClient, const char * message) {
 /* 
  * logClientSend ()
  */
-void epicsShareAPI logClientSend ( logClientId id, const char * message )
+void LIBCOMSTD_API logClientSend ( logClientId id, const char * message )
 {
     logClient * pClient = ( logClient * ) id;
 
@@ -219,7 +218,7 @@ void epicsShareAPI logClientSend ( logClientId id, const char * message )
 }
 
 
-void epicsShareAPI logClientFlush ( logClientId id )
+void LIBCOMSTD_API logClientFlush ( logClientId id )
 {
     unsigned nSent;
     int status = 0;
@@ -448,7 +447,7 @@ static void logClientRestart ( logClientId id )
 /*
  *  logClientCreate()
  */
-logClientId epicsShareAPI logClientCreate (
+logClientId LIBCOMSTD_API logClientCreate (
     struct in_addr server_addr, unsigned short server_port)
 {
     logClient *pClient;
@@ -511,7 +510,7 @@ logClientId epicsShareAPI logClientCreate (
 /*
  * logClientShow ()
  */
-void epicsShareAPI logClientShow (logClientId id, unsigned level)
+void LIBCOMSTD_API logClientShow (logClientId id, unsigned level)
 {
     logClient *pClient = (logClient *) id;
 
@@ -543,7 +542,7 @@ void epicsShareAPI logClientShow (logClientId id, unsigned level)
 /*
  * iocLogPrefix()
  */
-void epicsShareAPI iocLogPrefix(const char * prefix)
+void LIBCOMSTD_API iocLogPrefix(const char * prefix)
 {
 
     /* If we have already established a log prefix, don't let the user change
diff --git a/modules/libcom/src/log/logClient.h b/modules/libcom/src/log/logClient.h
index 3b3f63a..4315af7 100644
--- a/modules/libcom/src/log/logClient.h
+++ b/modules/libcom/src/log/logClient.h
@@ -17,7 +17,7 @@
 
 #ifndef INClogClienth
 #define INClogClienth 1
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "osiSock.h" /* for 'struct in_addr' */
 
 /* include default log client interface for backward compatibility */
@@ -28,16 +28,16 @@ extern "C" {
 #endif
 
 typedef void *logClientId;
-epicsShareFunc logClientId epicsShareAPI logClientCreate (
+LIBCOM_API logClientId LIBCOMSTD_API logClientCreate (
     struct in_addr server_addr, unsigned short server_port);
-epicsShareFunc void epicsShareAPI logClientSend (logClientId id, const char *message);
-epicsShareFunc void epicsShareAPI logClientShow (logClientId id, unsigned level);
-epicsShareFunc void epicsShareAPI logClientFlush (logClientId id);
-epicsShareFunc void epicsShareAPI iocLogPrefix(const char* prefix);
+LIBCOM_API void LIBCOMSTD_API logClientSend (logClientId id, const char *message);
+LIBCOM_API void LIBCOMSTD_API logClientShow (logClientId id, unsigned level);
+LIBCOM_API void LIBCOMSTD_API logClientFlush (logClientId id);
+LIBCOM_API void LIBCOMSTD_API iocLogPrefix(const char* prefix);
 
 /* deprecated interface; retained for backward compatibility */
 /* note: implementations are in iocLog.c, not logClient.c */
-epicsShareFunc logClientId epicsShareAPI logClientInit (void);
+LIBCOM_API logClientId LIBCOMSTD_API logClientInit (void);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/macLib/macCore.c b/modules/libcom/src/macLib/macCore.c
index 6f84d6b..9e7ea57 100644
--- a/modules/libcom/src/macLib/macCore.c
+++ b/modules/libcom/src/macLib/macCore.c
@@ -25,7 +25,6 @@
 #include <stdlib.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "dbDefs.h"
 #include "errlog.h"
 #include "dbmf.h"
@@ -98,7 +97,7 @@ static char *Strdup( const char *string );
  * of macro definitions
  */
 long                            /* 0 = OK; <0 = ERROR */
-epicsShareAPI macCreateHandle(
+LIBCOMSTD_API macCreateHandle(
     MAC_HANDLE  **pHandle,      /* address of variable to receive pointer */
                                 /* to new macro substitution context */
 
@@ -152,7 +151,7 @@ epicsShareAPI macCreateHandle(
  * for the given handle
  */
 void
-epicsShareAPI macSuppressWarning(
+LIBCOMSTD_API macSuppressWarning(
     MAC_HANDLE  *handle,        /* opaque handle */
     int         suppress        /* 0 means issue, 1 means suppress */
 )
@@ -172,7 +171,7 @@ epicsShareAPI macSuppressWarning(
  */
 long                            /* strlen(dest), <0 if any macros are */
                                 /* undefined */
-epicsShareAPI macExpandString(
+LIBCOMSTD_API macExpandString(
     MAC_HANDLE  *handle,        /* opaque handle */
 
     const char  *src,           /* source string */
@@ -231,7 +230,7 @@ epicsShareAPI macExpandString(
  * already existed
  */
 long                            /* strlen(value) */
-epicsShareAPI macPutValue(
+LIBCOMSTD_API macPutValue(
     MAC_HANDLE  *handle,        /* opaque handle */
 
     const char  *name,          /* macro name */
@@ -299,7 +298,7 @@ epicsShareAPI macPutValue(
  * Return the value of a macro
  */
 long                            /* strlen(value), <0 if undefined */
-epicsShareAPI macGetValue(
+LIBCOMSTD_API macGetValue(
     MAC_HANDLE  *handle,        /* opaque handle */
 
     const char  *name,          /* macro name or reference */
@@ -358,7 +357,7 @@ epicsShareAPI macGetValue(
  * context
  */
 long                            /* 0 = OK; <0 = ERROR */
-epicsShareAPI macDeleteHandle(
+LIBCOMSTD_API macDeleteHandle(
     MAC_HANDLE  *handle )       /* opaque handle */
 {
     MAC_ENTRY *entry, *nextEntry;
@@ -390,7 +389,7 @@ epicsShareAPI macDeleteHandle(
  * Mark the start of a new scoping level
  */
 long                            /* 0 = OK; <0 = ERROR */
-epicsShareAPI macPushScope(
+LIBCOMSTD_API macPushScope(
     MAC_HANDLE  *handle )       /* opaque handle */
 {
     MAC_ENTRY *entry;
@@ -425,7 +424,7 @@ epicsShareAPI macPushScope(
  * Pop all macros defined since the last call to macPushScope()
  */
 long                            /* 0 = OK; <0 = ERROR */
-epicsShareAPI macPopScope(
+LIBCOMSTD_API macPopScope(
     MAC_HANDLE  *handle )       /* opaque handle */
 {
     MAC_ENTRY *entry, *nextEntry;
@@ -469,7 +468,7 @@ epicsShareAPI macPopScope(
  * Report macro details to standard output
  */
 long                            /* 0 = OK; <0 = ERROR */
-epicsShareAPI macReportMacros(
+LIBCOMSTD_API macReportMacros(
     MAC_HANDLE  *handle )       /* opaque handle */
 {
     const char *format = "%-1s %-16s %-16s %s\n";
diff --git a/modules/libcom/src/macLib/macEnv.c b/modules/libcom/src/macLib/macEnv.c
index f102748..3678911 100644
--- a/modules/libcom/src/macLib/macEnv.c
+++ b/modules/libcom/src/macLib/macEnv.c
@@ -12,18 +12,17 @@
 #include <stdlib.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "errlog.h"
 #include "epicsString.h"
 #include "macLib.h"
 
-char * epicsShareAPI
+char * LIBCOMSTD_API
 macEnvExpand(const char *str)
 {
     return macDefExpand(str, NULL);
 }
 
-char * epicsShareAPI
+char * LIBCOMSTD_API
 macDefExpand(const char *str, MAC_HANDLE *macros)
 {
     MAC_HANDLE *handle;
diff --git a/modules/libcom/src/macLib/macLib.h b/modules/libcom/src/macLib/macLib.h
index 14ecdaa..4a762bc 100644
--- a/modules/libcom/src/macLib/macLib.h
+++ b/modules/libcom/src/macLib/macLib.h
@@ -19,7 +19,7 @@
  * EPICS include files needed by this file
  */
 #include "ellLib.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -46,8 +46,8 @@ typedef struct {
 /*
  * Function prototypes (core library)
  */
-epicsShareFunc long             /* 0 = OK; <0 = ERROR */
-epicsShareAPI macCreateHandle(
+LIBCOM_API long             /* 0 = OK; <0 = ERROR */
+LIBCOMSTD_API macCreateHandle(
     MAC_HANDLE  **handle,       /* address of variable to receive pointer */
                                 /* to new macro substitution context */
 
@@ -57,16 +57,16 @@ epicsShareAPI macCreateHandle(
                                 /* argument implies no macros */
 );
 
-epicsShareFunc void
-epicsShareAPI macSuppressWarning(
+LIBCOM_API void
+LIBCOMSTD_API macSuppressWarning(
     MAC_HANDLE  *handle,        /* opaque handle */
 
     int         falseTrue       /*0 means issue, 1 means suppress*/
 );
 
-epicsShareFunc long             /* strlen(dest), <0 if any macros are */
+LIBCOM_API long             /* strlen(dest), <0 if any macros are */
                                 /* undefined */
-epicsShareAPI macExpandString(
+LIBCOMSTD_API macExpandString(
     MAC_HANDLE  *handle,        /* opaque handle */
 
     const char  *src,           /* source string */
@@ -77,8 +77,8 @@ epicsShareAPI macExpandString(
 );
 
 
-epicsShareFunc long             /* strlen(value) */
-epicsShareAPI macPutValue(
+LIBCOM_API long             /* strlen(value) */
+LIBCOMSTD_API macPutValue(
     MAC_HANDLE  *handle,        /* opaque handle */
 
     const char  *name,          /* macro name */
@@ -86,8 +86,8 @@ epicsShareAPI macPutValue(
     const char  *value          /* macro value */
 );
 
-epicsShareFunc long             /* strlen(value), <0 if undefined */
-epicsShareAPI macGetValue(
+LIBCOM_API long             /* strlen(value), <0 if undefined */
+LIBCOMSTD_API macGetValue(
     MAC_HANDLE  *handle,        /* opaque handle */
 
     const char  *name,          /* macro name or reference */
@@ -98,31 +98,31 @@ epicsShareAPI macGetValue(
     long        capacity        /* capacity of destination buffer (value) */
 );
 
-epicsShareFunc long             /* 0 = OK; <0 = ERROR */
-epicsShareAPI macDeleteHandle(
+LIBCOM_API long             /* 0 = OK; <0 = ERROR */
+LIBCOMSTD_API macDeleteHandle(
     MAC_HANDLE  *handle         /* opaque handle */
 );
 
-epicsShareFunc long             /* 0 = OK; <0 = ERROR */
-epicsShareAPI macPushScope(
+LIBCOM_API long             /* 0 = OK; <0 = ERROR */
+LIBCOMSTD_API macPushScope(
     MAC_HANDLE  *handle         /* opaque handle */
 );
 
-epicsShareFunc long             /* 0 = OK; <0 = ERROR */
-epicsShareAPI macPopScope(
+LIBCOM_API long             /* 0 = OK; <0 = ERROR */
+LIBCOMSTD_API macPopScope(
     MAC_HANDLE  *handle         /* opaque handle */
 );
 
-epicsShareFunc long             /* 0 = OK; <0 = ERROR */
-epicsShareAPI macReportMacros(
+LIBCOM_API long             /* 0 = OK; <0 = ERROR */
+LIBCOMSTD_API macReportMacros(
     MAC_HANDLE  *handle         /* opaque handle */
 );
 
 /*
  * Function prototypes (utility library)
  */
-epicsShareFunc long             /* #defns encountered; <0 = ERROR */
-epicsShareAPI macParseDefns(
+LIBCOM_API long             /* #defns encountered; <0 = ERROR */
+LIBCOMSTD_API macParseDefns(
     MAC_HANDLE  *handle,        /* opaque handle; can be NULL if default */
                                 /* special characters are to be used */
 
@@ -135,8 +135,8 @@ epicsShareAPI macParseDefns(
                                 /* allocated contiguously */
 );
 
-epicsShareFunc long             /* #macros defined; <0 = ERROR */
-epicsShareAPI macInstallMacros(
+LIBCOM_API long             /* #macros defined; <0 = ERROR */
+LIBCOMSTD_API macInstallMacros(
     MAC_HANDLE  *handle,        /* opaque handle */
 
     char        *pairs[]        /* pointer to NULL-terminated array of */
@@ -145,13 +145,13 @@ epicsShareAPI macInstallMacros(
                                 /* argument implies no macros */
 );
 
-epicsShareFunc char *           /* expanded string; NULL if any undefined macros */
-epicsShareAPI macEnvExpand(
+LIBCOM_API char *           /* expanded string; NULL if any undefined macros */
+LIBCOMSTD_API macEnvExpand(
     const char *str             /* string to be expanded */
 );
 
-epicsShareFunc char *           /* expanded string; NULL if any undefined macros */
-epicsShareAPI macDefExpand(
+LIBCOM_API char *           /* expanded string; NULL if any undefined macros */
+LIBCOMSTD_API macDefExpand(
     const char *str,            /* string to be expanded */
     MAC_HANDLE *macros          /* opaque handle; can be NULL if default */
                                 /* special characters are to be used */
diff --git a/modules/libcom/src/macLib/macUtil.c b/modules/libcom/src/macLib/macUtil.c
index 7bf7354..c226198 100644
--- a/modules/libcom/src/macLib/macUtil.c
+++ b/modules/libcom/src/macLib/macUtil.c
@@ -17,7 +17,6 @@
 #include <stdlib.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "dbDefs.h"
 #include "errlog.h"
 #include "macLib.h"
@@ -30,7 +29,7 @@
  * values)
  */
 long				/* #defns encountered; <0 = ERROR */
-epicsShareAPI macParseDefns(
+LIBCOMSTD_API macParseDefns(
     MAC_HANDLE	*handle,	/* opaque handle; can be NULL if default */
 				/* special characters are to be used */
 
@@ -251,7 +250,7 @@ error:
  * one (preferably two) NULL pointers 
  */
 long				/* #macros defined; <0 = ERROR */
-epicsShareAPI macInstallMacros(
+LIBCOMSTD_API macInstallMacros(
     MAC_HANDLE	*handle,	/* opaque handle */
 
     char	*pairs[] )	/* pointer to NULL-terminated array of */
diff --git a/modules/libcom/src/misc/aToIPAddr.c b/modules/libcom/src/misc/aToIPAddr.c
index c21b574..ffcbb5f 100644
--- a/modules/libcom/src/misc/aToIPAddr.c
+++ b/modules/libcom/src/misc/aToIPAddr.c
@@ -14,7 +14,6 @@
 #include <stdio.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "epicsTypes.h"
 #include "osiSock.h"
 
@@ -75,7 +74,7 @@ static int initIPAddr ( struct in_addr ipAddr, unsigned port,
  * "pAddrString" does not contain an address of the form
  * "n.n.n.n:p or host:p"
  */
-epicsShareFunc int epicsShareAPI 
+LIBCOM_API int LIBCOMSTD_API 
 aToIPAddr( const char *pAddrString, unsigned short defaultPort, 
                 struct sockaddr_in *pIP )
 {
diff --git a/modules/libcom/src/misc/adjustment.c b/modules/libcom/src/misc/adjustment.c
index ac10e28..ec24881 100644
--- a/modules/libcom/src/misc/adjustment.c
+++ b/modules/libcom/src/misc/adjustment.c
@@ -20,10 +20,9 @@
  * After setting the following they will be declared as exports
  *   (Appropriate for what we implenment)
  */
-#define epicsExportSharedSymbols
 #include "adjustment.h"
 
-epicsShareFunc size_t adjustToWorstCaseAlignment(size_t size)
+LIBCOM_API size_t adjustToWorstCaseAlignment(size_t size)
 {
     int align_size, adjust;
     struct test_long_word { char c; long lw; };
diff --git a/modules/libcom/src/misc/adjustment.h b/modules/libcom/src/misc/adjustment.h
index 3f15203..76d333f 100644
--- a/modules/libcom/src/misc/adjustment.h
+++ b/modules/libcom/src/misc/adjustment.h
@@ -11,13 +11,13 @@
 
 #ifndef INCadjustmenth
 #define INCadjustmenth
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-epicsShareFunc size_t adjustToWorstCaseAlignment(size_t size);
+LIBCOM_API size_t adjustToWorstCaseAlignment(size_t size);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/misc/alarm.h b/modules/libcom/src/misc/alarm.h
index 58e2b73..7fb1eed 100644
--- a/modules/libcom/src/misc/alarm.h
+++ b/modules/libcom/src/misc/alarm.h
@@ -16,7 +16,7 @@
 #ifndef INC_alarm_H
 #define INC_alarm_H
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -97,8 +97,8 @@ typedef enum {
 
 /* Name string arrays */
 
-epicsShareExtern const char *epicsAlarmSeverityStrings [ALARM_NSEV];
-epicsShareExtern const char *epicsAlarmConditionStrings [ALARM_NSTATUS];
+LIBCOM_API extern const char *epicsAlarmSeverityStrings [ALARM_NSEV];
+LIBCOM_API extern const char *epicsAlarmConditionStrings [ALARM_NSTATUS];
 
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/misc/alarmString.c b/modules/libcom/src/misc/alarmString.c
index 4db179d..b09f74b 100644
--- a/modules/libcom/src/misc/alarmString.c
+++ b/modules/libcom/src/misc/alarmString.c
@@ -9,12 +9,11 @@
 
 /* String names for alarm status and severity values */
 
-#define epicsExportSharedSymbols
 #include "alarm.h"
 
 /* ALARM SEVERITIES - must match menuAlarmSevr.dbd and alarm.h */
 
-epicsShareDef const char * epicsAlarmSeverityStrings[ALARM_NSEV] = {
+const char * epicsAlarmSeverityStrings[ALARM_NSEV] = {
     "NO_ALARM",
     "MINOR",
     "MAJOR",
@@ -24,7 +23,7 @@ epicsShareDef const char * epicsAlarmSeverityStrings[ALARM_NSEV] = {
 
 /* ALARM STATUS - must match menuAlarmStat.dbd and alarm.h */
 
-epicsShareDef const char * epicsAlarmConditionStrings[ALARM_NSTATUS] = {
+const char * epicsAlarmConditionStrings[ALARM_NSTATUS] = {
     "NO_ALARM",
     "READ",
     "WRITE",
diff --git a/modules/libcom/src/misc/cantProceed.c b/modules/libcom/src/misc/cantProceed.c
index 6c35796..d5ac257 100644
--- a/modules/libcom/src/misc/cantProceed.c
+++ b/modules/libcom/src/misc/cantProceed.c
@@ -14,13 +14,12 @@
 #include <stdlib.h>
 #include <stdarg.h>
 
-#define epicsExportSharedSymbols
 #include "errlog.h"
 #include "cantProceed.h"
 #include "epicsThread.h"
 #include "epicsStackTrace.h"
 
-epicsShareFunc void * callocMustSucceed(size_t count, size_t size, const char *msg)
+LIBCOM_API void * callocMustSucceed(size_t count, size_t size, const char *msg)
 {
     void * mem = NULL;
     if (count > 0 && size > 0) {
@@ -36,7 +35,7 @@ epicsShareFunc void * callocMustSucceed(size_t count, size_t size, const char *m
     return mem;
 }
 
-epicsShareFunc void * mallocMustSucceed(size_t size, const char *msg)
+LIBCOM_API void * mallocMustSucceed(size_t size, const char *msg)
 {
     void * mem = NULL;
     if (size > 0) {
@@ -52,7 +51,7 @@ epicsShareFunc void * mallocMustSucceed(size_t size, const char *msg)
     return mem;
 }
 
-epicsShareFunc void cantProceed(const char *msg, ...)
+LIBCOM_API void cantProceed(const char *msg, ...)
 {
     va_list pvar;
     va_start(pvar, msg);
diff --git a/modules/libcom/src/misc/cantProceed.h b/modules/libcom/src/misc/cantProceed.h
index 437f968..168f936 100644
--- a/modules/libcom/src/misc/cantProceed.h
+++ b/modules/libcom/src/misc/cantProceed.h
@@ -12,15 +12,15 @@
 #include <stdlib.h>
 
 #include "compilerDependencies.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-epicsShareFunc void cantProceed(const char *errorMessage, ...) EPICS_PRINTF_STYLE(1,2);
-epicsShareFunc void * callocMustSucceed(size_t count, size_t size, const char *errorMessage);
-epicsShareFunc void * mallocMustSucceed(size_t size, const char *errorMessage);
+LIBCOM_API void cantProceed(const char *errorMessage, ...) EPICS_PRINTF_STYLE(1,2);
+LIBCOM_API void * callocMustSucceed(size_t count, size_t size, const char *errorMessage);
+LIBCOM_API void * mallocMustSucceed(size_t size, const char *errorMessage);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/misc/epicsConvert.c b/modules/libcom/src/misc/epicsConvert.c
index 9318ceb..bbc29aa 100644
--- a/modules/libcom/src/misc/epicsConvert.c
+++ b/modules/libcom/src/misc/epicsConvert.c
@@ -11,12 +11,11 @@
 #include <float.h>
 #include <limits.h>
 
-#define epicsExportSharedSymbols
 #include "epicsMath.h"
 #include "epicsConvert.h"
 #include "cantProceed.h"
 
-epicsShareFunc float epicsConvertDoubleToFloat(double value)
+LIBCOM_API float epicsConvertDoubleToFloat(double value)
 {
     double abs;
 
diff --git a/modules/libcom/src/misc/epicsConvert.h b/modules/libcom/src/misc/epicsConvert.h
index 1c38bc3..29cdbab 100644
--- a/modules/libcom/src/misc/epicsConvert.h
+++ b/modules/libcom/src/misc/epicsConvert.h
@@ -11,13 +11,13 @@
 #ifndef INC_epicsConvert_H
 #define INC_epicsConvert_H
 
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-epicsShareFunc float epicsConvertDoubleToFloat(double value);
+LIBCOM_API float epicsConvertDoubleToFloat(double value);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/misc/epicsExit.c b/modules/libcom/src/misc/epicsExit.c
index 266835e..af36bce 100644
--- a/modules/libcom/src/misc/epicsExit.c
+++ b/modules/libcom/src/misc/epicsExit.c
@@ -27,7 +27,6 @@
 #include <errno.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "ellLib.h"
 #include "errlog.h"
 #include "epicsThread.h"
@@ -100,7 +99,7 @@ static void epicsExitCallAtExitsPvt(exitPvt *pep)
     }
 }
 
-epicsShareFunc void epicsExitCallAtExits(void)
+LIBCOM_API void epicsExitCallAtExits(void)
 {
     exitPvt * pep = 0;
 
@@ -119,7 +118,7 @@ epicsShareFunc void epicsExitCallAtExits(void)
     epicsMutexCleanup();
 }
 
-epicsShareFunc void epicsExitCallAtThreadExits(void)
+LIBCOM_API void epicsExitCallAtThreadExits(void)
 {
     exitPvt * pep;
 
@@ -148,7 +147,7 @@ static int epicsAtExitPvt(exitPvt *pep, epicsExitFunc func, void *arg, const cha
     return status;
 }
 
-epicsShareFunc int epicsAtThreadExit(epicsExitFunc func, void *arg)
+LIBCOM_API int epicsAtThreadExit(epicsExitFunc func, void *arg)
 {
     exitPvt * pep;
 
@@ -164,7 +163,7 @@ epicsShareFunc int epicsAtThreadExit(epicsExitFunc func, void *arg)
     return epicsAtExitPvt ( pep, func, arg, NULL );
 }
 
-epicsShareFunc int epicsAtExit3(epicsExitFunc func, void *arg, const char* name)
+LIBCOM_API int epicsAtExit3(epicsExitFunc func, void *arg, const char* name)
 {
     int status = -1;
 
@@ -180,7 +179,7 @@ epicsShareFunc int epicsAtExit3(epicsExitFunc func, void *arg, const char* name)
     return status;
 }
 
-epicsShareFunc void epicsExit(int status)
+LIBCOM_API void epicsExit(int status)
 {
     epicsExitCallAtExits();
     epicsThreadSleep(0.1);
@@ -202,7 +201,7 @@ static void exitLaterOnceFunc(void *raw)
                       &exitNow, NULL);
 }
 
-epicsShareFunc void epicsExitLater(int status)
+LIBCOM_API void epicsExitLater(int status)
 {
     epicsThreadOnce(&exitLaterOnce, &exitLaterOnceFunc, &status);
 }
diff --git a/modules/libcom/src/misc/epicsExit.h b/modules/libcom/src/misc/epicsExit.h
index 3e961cb..53abb81 100644
--- a/modules/libcom/src/misc/epicsExit.h
+++ b/modules/libcom/src/misc/epicsExit.h
@@ -9,7 +9,7 @@
 /*epicsExit.h*/
 #ifndef epicsExith
 #define epicsExith
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -17,14 +17,14 @@ extern "C" {
 
 typedef void (*epicsExitFunc)(void *arg);
 
-epicsShareFunc void epicsExit(int status);
-epicsShareFunc void epicsExitLater(int status);
-epicsShareFunc void epicsExitCallAtExits(void);
-epicsShareFunc int epicsAtExit3(epicsExitFunc func, void *arg, const char* name);
+LIBCOM_API void epicsExit(int status);
+LIBCOM_API void epicsExitLater(int status);
+LIBCOM_API void epicsExitCallAtExits(void);
+LIBCOM_API int epicsAtExit3(epicsExitFunc func, void *arg, const char* name);
 #define epicsAtExit(F,A) epicsAtExit3(F,A,#F)
 
-epicsShareFunc void epicsExitCallAtThreadExits(void);
-epicsShareFunc int epicsAtThreadExit(epicsExitFunc func, void *arg);
+LIBCOM_API void epicsExitCallAtThreadExits(void);
+LIBCOM_API int epicsAtThreadExit(epicsExitFunc func, void *arg);
 
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/misc/epicsStdlib.c b/modules/libcom/src/misc/epicsStdlib.c
index f434898..328f519 100644
--- a/modules/libcom/src/misc/epicsStdlib.c
+++ b/modules/libcom/src/misc/epicsStdlib.c
@@ -13,7 +13,6 @@
 #include <errno.h>
 #include <float.h>
 
-#define epicsExportSharedSymbols
 #include "epicsMath.h"
 #include "epicsStdlib.h"
 #include "epicsString.h"
@@ -22,7 +21,7 @@
 
 /* These are the conversion primitives */
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseLong(const char *str, long *to, int base, char **units)
 {
     int c;
@@ -53,7 +52,7 @@ epicsParseLong(const char *str, long *to, int base, char **units)
     return 0;
 }
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseULong(const char *str, unsigned long *to, int base, char **units)
 {
     int c;
@@ -84,7 +83,7 @@ epicsParseULong(const char *str, unsigned long *to, int base, char **units)
     return 0;
 }
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseLLong(const char *str, long long *to, int base, char **units)
 {
     int c;
@@ -115,7 +114,7 @@ epicsParseLLong(const char *str, long long *to, int base, char **units)
     return 0;
 }
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseULLong(const char *str, unsigned long long *to, int base, char **units)
 {
     int c;
@@ -146,7 +145,7 @@ epicsParseULLong(const char *str, unsigned long long *to, int base, char **units
     return 0;
 }
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseDouble(const char *str, double *to, char **units)
 {
     int c;
@@ -178,7 +177,7 @@ epicsParseDouble(const char *str, double *to, char **units)
 
 /* These call the primitives */
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseInt8(const char *str, epicsInt8 *to, int base, char **units)
 {
     long value;
@@ -194,7 +193,7 @@ epicsParseInt8(const char *str, epicsInt8 *to, int base, char **units)
     return 0;
 }
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseUInt8(const char *str, epicsUInt8 *to, int base, char **units)
 {
     unsigned long value;
@@ -210,7 +209,7 @@ epicsParseUInt8(const char *str, epicsUInt8 *to, int base, char **units)
     return 0;
 }
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseInt16(const char *str, epicsInt16 *to, int base, char **units)
 {
     long value;
@@ -226,7 +225,7 @@ epicsParseInt16(const char *str, epicsInt16 *to, int base, char **units)
     return 0;
 }
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseUInt16(const char *str, epicsUInt16 *to, int base, char **units)
 {
     unsigned long value;
@@ -242,7 +241,7 @@ epicsParseUInt16(const char *str, epicsUInt16 *to, int base, char **units)
     return 0;
 }
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseInt32(const char *str, epicsInt32 *to, int base, char **units)
 {
     long value;
@@ -260,7 +259,7 @@ epicsParseInt32(const char *str, epicsInt32 *to, int base, char **units)
     return 0;
 }
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseUInt32(const char *str, epicsUInt32 *to, int base, char **units)
 {
     unsigned long value;
@@ -278,7 +277,7 @@ epicsParseUInt32(const char *str, epicsUInt32 *to, int base, char **units)
     return 0;
 }
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseInt64(const char *str, epicsInt64 *to, int base, char **units)
 {
 #if (LONG_MAX == 0x7fffffffffffffffLL)
@@ -296,7 +295,7 @@ epicsParseInt64(const char *str, epicsInt64 *to, int base, char **units)
     return 0;
 }
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseUInt64(const char *str, epicsUInt64 *to, int base, char **units)
 {
 #if (ULONG_MAX == 0xffffffffffffffffULL)
@@ -315,7 +314,7 @@ epicsParseUInt64(const char *str, epicsUInt64 *to, int base, char **units)
 }
 
 
-epicsShareFunc int
+LIBCOM_API int
 epicsParseFloat(const char *str, float *to, char **units)
 {
     double value, abs;
@@ -339,11 +338,11 @@ epicsParseFloat(const char *str, float *to, char **units)
  *   #define epicsStrtod strtod
  *
  * If strtod() is broken, osdStrtod.h defines this prototype:
- *   epicsShareFunc double epicsStrtod(const char *str, char **endp);
+ *   LIBCOM_API double epicsStrtod(const char *str, char **endp);
  */
 
 #ifndef epicsStrtod
-epicsShareFunc double
+LIBCOM_API double
 epicsStrtod(const char *str, char **endp)
 {
     const char *cp = str;
diff --git a/modules/libcom/src/misc/epicsStdlib.h b/modules/libcom/src/misc/epicsStdlib.h
index 20b7cd2..7d4c293 100644
--- a/modules/libcom/src/misc/epicsStdlib.h
+++ b/modules/libcom/src/misc/epicsStdlib.h
@@ -15,7 +15,7 @@
 #include <stdlib.h>
 #include <limits.h>
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "osdStrtod.h"
 #include "epicsTypes.h"
 #include "errMdef.h"
@@ -31,37 +31,37 @@ extern "C" {
 #define S_stdlib_badBase      (M_stdlib | 5) /* Number base not supported */
 
 
-epicsShareFunc int
+LIBCOM_API int
     epicsParseLong(const char *str, long *to, int base, char **units);
-epicsShareFunc int
+LIBCOM_API int
     epicsParseULong(const char *str, unsigned long *to, int base, char **units);
-epicsShareFunc int
+LIBCOM_API int
     epicsParseLLong(const char *str, long long *to, int base, char **units);
-epicsShareFunc int
+LIBCOM_API int
     epicsParseULLong(const char *str, unsigned long long *to, int base, char **units);
-epicsShareFunc int
+LIBCOM_API int
     epicsParseDouble(const char *str, double *to, char **units);
 
-epicsShareFunc int
+LIBCOM_API int
     epicsParseFloat(const char *str, float *to, char **units);
 
-epicsShareFunc int
+LIBCOM_API int
     epicsParseInt8(const char *str, epicsInt8 *to, int base, char **units);
-epicsShareFunc int
+LIBCOM_API int
     epicsParseUInt8(const char *str, epicsUInt8 *to, int base, char **units);
-epicsShareFunc int
+LIBCOM_API int
     epicsParseInt16(const char *str, epicsInt16 *to, int base, char **units);
-epicsShareFunc int
+LIBCOM_API int
     epicsParseUInt16(const char *str, epicsUInt16 *to, int base, char **units);
 
-epicsShareFunc int
+LIBCOM_API int
     epicsParseInt32(const char *str, epicsInt32 *to, int base, char **units);
-epicsShareFunc int
+LIBCOM_API int
     epicsParseUInt32(const char *str, epicsUInt32 *to, int base, char **units);
 
-epicsShareFunc int
+LIBCOM_API int
     epicsParseInt64(const char *str, epicsInt64 *to, int base, char **units);
-epicsShareFunc int
+LIBCOM_API int
     epicsParseUInt64(const char *str, epicsUInt64 *to, int base, char **units);
 
 #define epicsParseFloat32(str, to, units) epicsParseFloat(str, to, units)
diff --git a/modules/libcom/src/misc/epicsString.c b/modules/libcom/src/misc/epicsString.c
index e41e21b..3f537b4 100644
--- a/modules/libcom/src/misc/epicsString.c
+++ b/modules/libcom/src/misc/epicsString.c
@@ -22,7 +22,6 @@
 #include <errno.h>
 #include <ctype.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 #include "cantProceed.h"
 #include "epicsString.h"
diff --git a/modules/libcom/src/misc/epicsString.h b/modules/libcom/src/misc/epicsString.h
index 093c73d..79e5f49 100644
--- a/modules/libcom/src/misc/epicsString.h
+++ b/modules/libcom/src/misc/epicsString.h
@@ -17,32 +17,32 @@
 
 #include <stdio.h>
 #include "epicsTypes.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-epicsShareFunc int epicsStrnRawFromEscaped(char *outbuf,      size_t outsize,
+LIBCOM_API int epicsStrnRawFromEscaped(char *outbuf,      size_t outsize,
                                            const char *inbuf, size_t inlen);
-epicsShareFunc int epicsStrnEscapedFromRaw(char *outbuf,      size_t outsize,
+LIBCOM_API int epicsStrnEscapedFromRaw(char *outbuf,      size_t outsize,
                                            const char *inbuf, size_t inlen);
-epicsShareFunc size_t epicsStrnEscapedFromRawSize(const char *buf, size_t len);
-epicsShareFunc int epicsStrCaseCmp(const char *s1, const char *s2);
-epicsShareFunc int epicsStrnCaseCmp(const char *s1, const char *s2, size_t len);
-epicsShareFunc char * epicsStrDup(const char *s);
-epicsShareFunc char * epicsStrnDup(const char *s, size_t len);
-epicsShareFunc int epicsStrPrintEscaped(FILE *fp, const char *s, size_t n);
+LIBCOM_API size_t epicsStrnEscapedFromRawSize(const char *buf, size_t len);
+LIBCOM_API int epicsStrCaseCmp(const char *s1, const char *s2);
+LIBCOM_API int epicsStrnCaseCmp(const char *s1, const char *s2, size_t len);
+LIBCOM_API char * epicsStrDup(const char *s);
+LIBCOM_API char * epicsStrnDup(const char *s, size_t len);
+LIBCOM_API int epicsStrPrintEscaped(FILE *fp, const char *s, size_t n);
 #define epicsStrSnPrintEscaped epicsStrnEscapedFromRaw
-epicsShareFunc size_t epicsStrnLen(const char *s, size_t maxlen);
-epicsShareFunc int epicsStrGlobMatch(const char *str, const char *pattern);
-epicsShareFunc char * epicsStrtok_r(char *s, const char *delim, char **lasts);
-epicsShareFunc unsigned int epicsStrHash(const char *str, unsigned int seed);
-epicsShareFunc unsigned int epicsMemHash(const char *str, size_t length,
+LIBCOM_API size_t epicsStrnLen(const char *s, size_t maxlen);
+LIBCOM_API int epicsStrGlobMatch(const char *str, const char *pattern);
+LIBCOM_API char * epicsStrtok_r(char *s, const char *delim, char **lasts);
+LIBCOM_API unsigned int epicsStrHash(const char *str, unsigned int seed);
+LIBCOM_API unsigned int epicsMemHash(const char *str, size_t length,
                                          unsigned int seed);
 
 /* dbTranslateEscape is deprecated, use epicsStrnRawFromEscaped instead */
-epicsShareFunc int dbTranslateEscape(char *s, const char *ct);
+LIBCOM_API int dbTranslateEscape(char *s, const char *ct);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/misc/epicsTypes.h b/modules/libcom/src/misc/epicsTypes.h
index efc6a91..399cb96 100644
--- a/modules/libcom/src/misc/epicsTypes.h
+++ b/modules/libcom/src/misc/epicsTypes.h
@@ -15,7 +15,7 @@
 #ifndef INC_epicsTypes_H
 #define INC_epicsTypes_H
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "compilerDependencies.h"
 
 #ifndef stringOf
@@ -120,7 +120,7 @@ typedef enum {
  * of type name strings.
  */
 #ifdef epicsTypesGLOBAL
-epicsShareDef const char *epicsTypeNames [lastEpicsType+1] = {
+const char *epicsTypeNames [lastEpicsType+1] = {
     "epicsInt8",
     "epicsUInt8",
     "epicsInt16",
@@ -134,7 +134,7 @@ epicsShareDef const char *epicsTypeNames [lastEpicsType+1] = {
     "epicsOldString",
 };
 #else /* epicsTypesGLOBAL */
-epicsShareExtern const char *epicsTypeNames [lastEpicsType+1];
+LIBCOM_API extern const char *epicsTypeNames [lastEpicsType+1];
 #endif /* epicsTypesGLOBAL */
 
 /*
@@ -142,7 +142,7 @@ epicsShareExtern const char *epicsTypeNames [lastEpicsType+1];
  * of type code name strings.
  */
 #ifdef epicsTypesGLOBAL
-epicsShareDef const char *epicsTypeCodeNames [lastEpicsType+1] = {
+const char *epicsTypeCodeNames [lastEpicsType+1] = {
     "epicsInt8T",
     "epicsUInt8T",
     "epicsInt16T",
@@ -156,11 +156,11 @@ epicsShareDef const char *epicsTypeCodeNames [lastEpicsType+1] = {
     "epicsOldStringT",
 };
 #else /* epicsTypesGLOBAL */
-epicsShareExtern const char *epicsTypeCodeNames [lastEpicsType+1];
+LIBCOM_API extern const char *epicsTypeCodeNames [lastEpicsType+1];
 #endif /* epicsTypesGLOBAL */
 
 #ifdef epicsTypesGLOBAL
-epicsShareDef const unsigned epicsTypeSizes [lastEpicsType+1] = {
+const unsigned epicsTypeSizes [lastEpicsType+1] = {
     sizeof (epicsInt8),
     sizeof (epicsUInt8),
     sizeof (epicsInt16),
@@ -174,7 +174,7 @@ epicsShareDef const unsigned epicsTypeSizes [lastEpicsType+1] = {
     sizeof (epicsOldString),
 };
 #else /* epicsTypesGLOBAL */
-epicsShareExtern const unsigned epicsTypeSizes [lastEpicsType+1];
+LIBCOM_API extern const unsigned epicsTypeSizes [lastEpicsType+1];
 #endif /* epicsTypesGLOBAL */
 
 /*
@@ -191,7 +191,7 @@ typedef enum {
 } epicsTypeClass;
 
 #ifdef epicsTypesGLOBAL
-epicsShareDef const epicsTypeClass epicsTypeClasses [lastEpicsType+1] = {
+const epicsTypeClass epicsTypeClasses [lastEpicsType+1] = {
     epicsIntC,
     epicsUIntC,
     epicsIntC,
@@ -205,12 +205,12 @@ epicsShareDef const epicsTypeClass epicsTypeClasses [lastEpicsType+1] = {
     epicsOldStringC
 };
 #else /* epicsTypesGLOBAL */
-epicsShareExtern const epicsTypeClass epicsTypeClasses [lastEpicsType+1];
+LIBCOM_API extern const epicsTypeClass epicsTypeClasses [lastEpicsType+1];
 #endif /* epicsTypesGLOBAL */
 
 
 #ifdef epicsTypesGLOBAL
-epicsShareDef const char *epicsTypeAnyFieldName [lastEpicsType+1] = {
+const char *epicsTypeAnyFieldName [lastEpicsType+1] = {
     "int8",
     "uInt8",
     "int16",
@@ -224,7 +224,7 @@ epicsShareDef const char *epicsTypeAnyFieldName [lastEpicsType+1] = {
     "", /* Old Style Strings will not be in epicsAny type */
 };
 #else /* epicsTypesGLOBAL */
-epicsShareExtern const char *epicsTypeAnyFieldName [lastEpicsType+1];
+LIBCOM_API extern const char *epicsTypeAnyFieldName [lastEpicsType+1];
 #endif /* epicsTypesGLOBAL */
 
 #endif /* INC_epicsTypes_H */
diff --git a/modules/libcom/src/misc/epicsUnitTest.c b/modules/libcom/src/misc/epicsUnitTest.c
index dce0598..2478989 100644
--- a/modules/libcom/src/misc/epicsUnitTest.c
+++ b/modules/libcom/src/misc/epicsUnitTest.c
@@ -20,7 +20,6 @@
 #  include <crtdbg.h>
 #endif
 
-#define epicsExportSharedSymbols
 #include "epicsThread.h"
 #include "epicsMutex.h"
 #include "epicsUnitTest.h"
diff --git a/modules/libcom/src/misc/epicsUnitTest.h b/modules/libcom/src/misc/epicsUnitTest.h
index 9a119ad..88555e0 100644
--- a/modules/libcom/src/misc/epicsUnitTest.h
+++ b/modules/libcom/src/misc/epicsUnitTest.h
@@ -15,36 +15,36 @@
 #include <stdarg.h>
 
 #include "compilerDependencies.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-epicsShareFunc void testPlan(int tests);
-epicsShareFunc int  testOkV(int pass, const char *fmt, va_list pvar);
-epicsShareFunc int  testOk(int pass, const char *fmt, ...)
+LIBCOM_API void testPlan(int tests);
+LIBCOM_API int  testOkV(int pass, const char *fmt, va_list pvar);
+LIBCOM_API int  testOk(int pass, const char *fmt, ...)
 						EPICS_PRINTF_STYLE(2, 3);
-epicsShareFunc void testPass(const char *fmt, ...)
+LIBCOM_API void testPass(const char *fmt, ...)
 						EPICS_PRINTF_STYLE(1, 2);
-epicsShareFunc void testFail(const char *fmt, ...)
+LIBCOM_API void testFail(const char *fmt, ...)
 						EPICS_PRINTF_STYLE(1, 2);
-epicsShareFunc void testSkip(int skip, const char *why);
-epicsShareFunc void testTodoBegin(const char *why);
-epicsShareFunc void testTodoEnd(void);
-epicsShareFunc int  testDiag(const char *fmt, ...)
+LIBCOM_API void testSkip(int skip, const char *why);
+LIBCOM_API void testTodoBegin(const char *why);
+LIBCOM_API void testTodoEnd(void);
+LIBCOM_API int  testDiag(const char *fmt, ...)
 						EPICS_PRINTF_STYLE(1, 2);
-epicsShareFunc void testAbort(const char *fmt, ...)
+LIBCOM_API void testAbort(const char *fmt, ...)
 						EPICS_PRINTF_STYLE(1, 2);
-epicsShareFunc int  testDone(void);
+LIBCOM_API int  testDone(void);
 
 #define testOk1(cond) testOk(cond, "%s", #cond)
 
 
 typedef int (*TESTFUNC)(void);
-epicsShareFunc void testHarness(void);
-epicsShareFunc void testHarnessExit(void *dummy);
-epicsShareFunc void runTestFunc(const char *name, TESTFUNC func);
+LIBCOM_API void testHarness(void);
+LIBCOM_API void testHarnessExit(void *dummy);
+LIBCOM_API void runTestFunc(const char *name, TESTFUNC func);
 
 #define runTest(func) runTestFunc(#func, func)
 #define testHarnessDone() testHarnessExit(0)
diff --git a/modules/libcom/src/misc/ipAddrToAsciiAsynchronous.cpp b/modules/libcom/src/misc/ipAddrToAsciiAsynchronous.cpp
index ec2c16d..4698a7a 100644
--- a/modules/libcom/src/misc/ipAddrToAsciiAsynchronous.cpp
+++ b/modules/libcom/src/misc/ipAddrToAsciiAsynchronous.cpp
@@ -21,7 +21,6 @@
 //#define EPICS_FREELIST_DEBUG
 #define EPICS_PRIVATE_API
 
-#define epicsExportSharedSymbols
 #include "ipAddrToAsciiAsynchronous.h"
 #include "epicsThread.h"
 #include "epicsMutex.h"
diff --git a/modules/libcom/src/misc/ipAddrToAsciiAsynchronous.h b/modules/libcom/src/misc/ipAddrToAsciiAsynchronous.h
index 9aefca4..64a0efa 100644
--- a/modules/libcom/src/misc/ipAddrToAsciiAsynchronous.h
+++ b/modules/libcom/src/misc/ipAddrToAsciiAsynchronous.h
@@ -17,16 +17,16 @@
 #define ipAddrToAsciiAsynchronous_h
 
 #include "osiSock.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
-class epicsShareClass ipAddrToAsciiCallBack {
+class LIBCOM_API ipAddrToAsciiCallBack {
 public:
     virtual void transactionComplete ( const char * pHostName ) = 0;
     virtual void show ( unsigned level ) const; 
     virtual ~ipAddrToAsciiCallBack () = 0;
 };
 
-class epicsShareClass ipAddrToAsciiTransaction {
+class LIBCOM_API ipAddrToAsciiTransaction {
 public:
     virtual void release () = 0; 
     virtual void ipAddrToAscii ( const osiSockAddr &, ipAddrToAsciiCallBack & ) = 0;
@@ -36,7 +36,7 @@ protected:
     virtual ~ipAddrToAsciiTransaction () = 0;
 };
 
-class epicsShareClass ipAddrToAsciiEngine {
+class LIBCOM_API ipAddrToAsciiEngine {
 public:
     virtual void release () = 0; 
     virtual ipAddrToAsciiTransaction & createTransaction () = 0;
diff --git a/modules/libcom/src/misc/shareLib.h b/modules/libcom/src/misc/shareLib.h
index 0d376d6..6935cdc 100644
--- a/modules/libcom/src/misc/shareLib.h
+++ b/modules/libcom/src/misc/shareLib.h
@@ -87,8 +87,8 @@
  *
  * #ifdef interfacePDQ_epicsExportSharedSymbols
  * #   define epicsExportSharedSymbols
- * #   include "shareLib.h"
  * #endif
+ * #include "shareLib.h"
  *
  * epicsShareFunc int myExtFunc ( int arg );
  * epicsShareExtern int myExtVar;
diff --git a/modules/libcom/src/misc/truncateFile.c b/modules/libcom/src/misc/truncateFile.c
index dc074d9..4271867 100644
--- a/modules/libcom/src/misc/truncateFile.c
+++ b/modules/libcom/src/misc/truncateFile.c
@@ -14,7 +14,6 @@
 #include <string.h>
 #include <limits.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 
 #ifndef SEEK_END
@@ -25,7 +24,7 @@
  * truncate to specified size (we dont use truncate()
  * because it is not portable)
  */
-epicsShareFunc enum TF_RETURN  truncateFile (const char *pFileName, unsigned long size)
+LIBCOM_API enum TF_RETURN  truncateFile (const char *pFileName, unsigned long size)
 {
 	long filePos;
 	FILE *pFile;
diff --git a/modules/libcom/src/misc/unixFileName.h b/modules/libcom/src/misc/unixFileName.h
index 9d7af25..0abfae3 100644
--- a/modules/libcom/src/misc/unixFileName.h
+++ b/modules/libcom/src/misc/unixFileName.h
@@ -14,7 +14,7 @@
 #ifndef unixFileNameH
 #define unixFileNameH
 
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -26,13 +26,13 @@ extern "C" {
 /** Return the absolute path of the current executable.
  @returns NULL or the path.  Caller must free()
  */
-epicsShareFunc
+LIBCOM_API
 char *epicsGetExecName(void);
 
 /** Return the absolute path of the directory containing the current executable.
  @returns NULL or the path.  Caller must free()
  */
-epicsShareFunc
+LIBCOM_API
 char *epicsGetExecDir(void);
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/osi/devLibVME.c b/modules/libcom/src/osi/devLibVME.c
index 6c7d93f..72e29d6 100644
--- a/modules/libcom/src/osi/devLibVME.c
+++ b/modules/libcom/src/osi/devLibVME.c
@@ -23,7 +23,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include "dbDefs.h"
 #include "epicsMutex.h"
 #include "errlog.h"
diff --git a/modules/libcom/src/osi/devLibVME.h b/modules/libcom/src/osi/devLibVME.h
index 4fb17f0..2603770 100644
--- a/modules/libcom/src/osi/devLibVME.h
+++ b/modules/libcom/src/osi/devLibVME.h
@@ -20,7 +20,7 @@
 #include "dbDefs.h"
 #include "osdVME.h"
 #include "errMdef.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "devLib.h"
 
 #ifdef __cplusplus
@@ -44,7 +44,7 @@ typedef enum {
  * pointer to an array of strings for each of
  * the above address types
  */
-epicsShareExtern const char *epicsAddressTypeName[];
+LIBCOM_API extern const char *epicsAddressTypeName[];
 
 #ifdef __cplusplus
 }
@@ -67,14 +67,14 @@ extern "C" {
  *  This section applies to all bus types
  */
 
-epicsShareFunc long devAddressMap(void); /* print an address map */
+LIBCOM_API long devAddressMap(void); /* print an address map */
 
 /*
  * devBusToLocalAddr()
  *
  * OSI routine to translate bus addresses their local CPU address mapping
  */
-epicsShareFunc long devBusToLocalAddr (
+LIBCOM_API long devBusToLocalAddr (
 		epicsAddressType addrType,
 		size_t busAddr,
 		volatile void **ppLocalAddr);
@@ -84,7 +84,7 @@ epicsShareFunc long devBusToLocalAddr (
  * a bus error safe "wordSize" read at the specified address which returns 
  * unsuccessful status if the device isnt present
  */
-epicsShareFunc long devReadProbe (
+LIBCOM_API long devReadProbe (
     unsigned wordSize, volatile const void *ptr, void *pValueRead);
 
 /*
@@ -97,7 +97,7 @@ epicsShareFunc long devReadProbe (
  * Checks all naturally aligned word sizes between char and long for
  * the entire specified range of bytes.
  */
-epicsShareFunc long devNoResponseProbe(
+LIBCOM_API long devNoResponseProbe(
 			epicsAddressType addrType,
 			size_t base,
 			size_t size
@@ -109,17 +109,17 @@ epicsShareFunc long devNoResponseProbe(
  * a bus error safe "wordSize" write at the specified address which returns 
  * unsuccessful status if the device isnt present
  */
-epicsShareFunc long devWriteProbe (
+LIBCOM_API long devWriteProbe (
     unsigned wordSize, volatile void *ptr, const void *pValueWritten);
 
-epicsShareFunc long devRegisterAddress(
+LIBCOM_API long devRegisterAddress(
 			const char *pOwnerName,
 			epicsAddressType addrType,
 			size_t logicalBaseAddress,
 			size_t size, /* bytes */
 			volatile void **pPhysicalAddress);
 
-epicsShareFunc long devUnregisterAddress(
+LIBCOM_API long devUnregisterAddress(
 			epicsAddressType addrType,
 			size_t logicalBaseAddress,
 			const char *pOwnerName);
@@ -127,7 +127,7 @@ epicsShareFunc long devUnregisterAddress(
 /*
  * allocate and register an unoccupied address block
  */
-epicsShareFunc long devAllocAddress(
+LIBCOM_API long devAllocAddress(
 			const char *pOwnerName,
 			epicsAddressType addrType,
 			size_t size,
@@ -143,7 +143,7 @@ epicsShareFunc long devAllocAddress(
 /*
  * connect ISR to a VME interrupt vector
  */
-epicsShareFunc long devConnectInterruptVME(
+LIBCOM_API long devConnectInterruptVME(
 			unsigned vectorNumber,
 			void (*pFunction)(void *),
 			void  *parameter);
@@ -155,7 +155,7 @@ epicsShareFunc long devConnectInterruptVME(
  * was connected. It is used as a key to prevent a driver from inadvertently
  * removing an interrupt handler that it didn't install 
  */
-epicsShareFunc long devDisconnectInterruptVME(
+LIBCOM_API long devDisconnectInterruptVME(
 			unsigned vectorNumber,
 			void (*pFunction)(void *));
 
@@ -164,25 +164,25 @@ epicsShareFunc long devDisconnectInterruptVME(
  *
  * returns boolean
  */
-epicsShareFunc int devInterruptInUseVME (unsigned vectorNumber);
+LIBCOM_API int devInterruptInUseVME (unsigned vectorNumber);
 
 /*
  * enable VME interrupt level
  */
-epicsShareFunc long devEnableInterruptLevelVME (unsigned level);
+LIBCOM_API long devEnableInterruptLevelVME (unsigned level);
 
 /*
  * disable VME interrupt level
  */
-epicsShareFunc long devDisableInterruptLevelVME (unsigned level);
+LIBCOM_API long devDisableInterruptLevelVME (unsigned level);
 
 /*
  * Routines to allocate and free memory in the A24 memory region.
  *
  */
-epicsShareFunc void *devLibA24Malloc(size_t);
-epicsShareFunc void *devLibA24Calloc(size_t);
-epicsShareFunc void devLibA24Free(void *pBlock);
+LIBCOM_API void *devLibA24Malloc(size_t);
+LIBCOM_API void *devLibA24Calloc(size_t);
+LIBCOM_API void devLibA24Free(void *pBlock);
 
 /*
  * ISA API
@@ -195,7 +195,7 @@ epicsShareFunc void devLibA24Free(void *pBlock);
  * (not implemented)
  * (API should be reviewed)
  */
-epicsShareFunc long devConnectInterruptISA(
+LIBCOM_API long devConnectInterruptISA(
 			unsigned interruptLevel,
 			void (*pFunction)(void *),
 			void  *parameter);
@@ -209,7 +209,7 @@ epicsShareFunc long devConnectInterruptISA(
  * was connected. It is used as a key to prevent a driver from inadvertently
  * removing an interrupt handler that it didn't install 
  */
-epicsShareFunc long devDisconnectInterruptISA(
+LIBCOM_API long devDisconnectInterruptISA(
 			unsigned interruptLevel,
 			void (*pFunction)(void *));
 
@@ -219,17 +219,17 @@ epicsShareFunc long devDisconnectInterruptISA(
  *
  * returns boolean
  */
-epicsShareFunc int devInterruptLevelInUseISA (unsigned interruptLevel);
+LIBCOM_API int devInterruptLevelInUseISA (unsigned interruptLevel);
 
 /*
  * enable ISA interrupt level
  */
-epicsShareFunc long devEnableInterruptLevelISA (unsigned level);
+LIBCOM_API long devEnableInterruptLevelISA (unsigned level);
 
 /*
  * disable ISA interrupt level
  */
-epicsShareFunc long devDisableInterruptLevelISA (unsigned level);
+LIBCOM_API long devDisableInterruptLevelISA (unsigned level);
 
 /*
  * Deprecated interface
@@ -247,7 +247,7 @@ typedef enum {intVME, intVXI, intISA} epicsInterruptType;
  * devConnectInterruptISA etc. devConnectInterrupt will be removed 
  * in a future release.
  */
-epicsShareFunc long devConnectInterrupt(
+LIBCOM_API long devConnectInterrupt(
 			epicsInterruptType intType,
 			unsigned vectorNumber,
 			void (*pFunction)(void *),
@@ -261,7 +261,7 @@ epicsShareFunc long devConnectInterrupt(
  * devDisconnectInterruptISA etc. devDisconnectInterrupt will be removed 
  * in a future release.
  */
-epicsShareFunc long devDisconnectInterrupt(
+LIBCOM_API long devDisconnectInterrupt(
 			epicsInterruptType      intType,
 			unsigned                vectorNumber,
 			void		        (*pFunction)(void *));
@@ -274,7 +274,7 @@ epicsShareFunc long devDisconnectInterrupt(
  * devEnableInterruptLevelISA etc. devEnableInterruptLevel will be removed 
  * in a future release.
  */
-epicsShareFunc long devEnableInterruptLevel(
+LIBCOM_API long devEnableInterruptLevel(
     epicsInterruptType intType, unsigned level);
 
 /*
@@ -285,7 +285,7 @@ epicsShareFunc long devEnableInterruptLevel(
  * devDisableInterruptLevelPCI etc. devDisableInterruptLevel will be removed 
  * in a future release.
  */
-epicsShareFunc long devDisableInterruptLevel (
+LIBCOM_API long devDisableInterruptLevel (
     epicsInterruptType intType, unsigned level);
 
 /*
@@ -295,7 +295,7 @@ epicsShareFunc long devDisableInterruptLevel (
  * Please use devNoResponseProbe(). locationProbe() will be removed 
  * in a future release.
  */
-epicsShareFunc long locationProbe (epicsAddressType addrType, char *pLocation);
+LIBCOM_API long locationProbe (epicsAddressType addrType, char *pLocation);
 
 #endif /* NO_DEVLIB_OLD_INTERFACE */
 
diff --git a/modules/libcom/src/osi/devLibVMEImpl.h b/modules/libcom/src/osi/devLibVMEImpl.h
index e479d86..e8312ea 100644
--- a/modules/libcom/src/osi/devLibVMEImpl.h
+++ b/modules/libcom/src/osi/devLibVMEImpl.h
@@ -20,7 +20,7 @@
 #define INCdevLibImplh 1
 
 #include "dbDefs.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "devLib.h"
 
 #ifdef __cplusplus
@@ -89,7 +89,7 @@ typedef struct devLibVME {
 	int (*pDevInterruptInUseVME) (unsigned vectorNumber);
 }devLibVME;
 
-epicsShareExtern devLibVME *pdevLibVME;
+LIBCOM_API extern devLibVME *pdevLibVME;
 
 #ifndef NO_DEVLIB_COMPAT
 #  define pdevLibVirtualOS pdevLibVME
diff --git a/modules/libcom/src/osi/epicsAssert.h b/modules/libcom/src/osi/epicsAssert.h
index 6f83d3a..2c88de0 100644
--- a/modules/libcom/src/osi/epicsAssert.h
+++ b/modules/libcom/src/osi/epicsAssert.h
@@ -16,7 +16,7 @@
 #ifndef INC_epicsAssert_H
 #define INC_epicsAssert_H
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "compilerDependencies.h"
 
 #ifdef __cplusplus
@@ -34,7 +34,7 @@ extern "C" {
 #   define assert(ignore) ((void) 0)
 #else /* NDEBUG */
 
-epicsShareFunc void epicsAssert (const char *pFile, const unsigned line,
+LIBCOM_API void epicsAssert (const char *pFile, const unsigned line,
     const char *pExp, const char *pAuthorName);
 
 #   define assert(exp) ((exp) ? (void)0 : \
diff --git a/modules/libcom/src/osi/epicsAtomicDefault.h b/modules/libcom/src/osi/epicsAtomicDefault.h
index 26115ce..9ae98ef 100644
--- a/modules/libcom/src/osi/epicsAtomicDefault.h
+++ b/modules/libcom/src/osi/epicsAtomicDefault.h
@@ -22,10 +22,10 @@ extern "C" {
 
 /*
  * struct EpicsAtomicLockKey;
- * epicsShareFunc void epicsAtomicReadMemoryBarrier ();
- * epicsShareFunc void epicsAtomicWriteMemoryBarrier ();
- * epicsShareFunc void epicsAtomicLock ( struct EpicsAtomicLockKey * );
- * epicsShareFunc void epicsAtomicUnock ( struct EpicsAtomicLockKey * );
+ * LIBCOM_API void epicsAtomicReadMemoryBarrier ();
+ * LIBCOM_API void epicsAtomicWriteMemoryBarrier ();
+ * LIBCOM_API void epicsAtomicLock ( struct EpicsAtomicLockKey * );
+ * LIBCOM_API void epicsAtomicUnock ( struct EpicsAtomicLockKey * );
  */
 
 /*
diff --git a/modules/libcom/src/osi/epicsEvent.cpp b/modules/libcom/src/osi/epicsEvent.cpp
index 237f7d2..7baec77 100644
--- a/modules/libcom/src/osi/epicsEvent.cpp
+++ b/modules/libcom/src/osi/epicsEvent.cpp
@@ -13,7 +13,6 @@
 #include <new>
 #include <exception>
 
-#define epicsExportSharedSymbols
 #include "epicsEvent.h"
 #include "epicsStdio.h"
 #include "cantProceed.h"
@@ -104,7 +103,7 @@ void epicsEvent::show ( unsigned level ) const
 
 extern "C" {
 
-epicsShareFunc epicsEventId epicsEventMustCreate (
+LIBCOM_API epicsEventId epicsEventMustCreate (
     epicsEventInitialState initialState)
 {
     epicsEventId id = epicsEventCreate (initialState);
@@ -114,14 +113,14 @@ epicsShareFunc epicsEventId epicsEventMustCreate (
     return id;
 }
 
-epicsShareFunc void epicsEventMustTrigger (epicsEventId id) {
+LIBCOM_API void epicsEventMustTrigger (epicsEventId id) {
     epicsEventStatus status = epicsEventTrigger (id);
 
     if (status != epicsEventOK)
         cantProceed ("epicsEventMustTrigger");
 }
 
-epicsShareFunc void epicsEventMustWait (epicsEventId id) {
+LIBCOM_API void epicsEventMustWait (epicsEventId id) {
     epicsEventStatus status = epicsEventWait (id);
 
     if (status != epicsEventOK)
diff --git a/modules/libcom/src/osi/epicsEvent.h b/modules/libcom/src/osi/epicsEvent.h
index e77d9a5..8a5eef2 100644
--- a/modules/libcom/src/osi/epicsEvent.h
+++ b/modules/libcom/src/osi/epicsEvent.h
@@ -9,7 +9,7 @@
 #ifndef epicsEventh
 #define epicsEventh
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 typedef struct epicsEventOSD *epicsEventId;
 
@@ -31,7 +31,7 @@ typedef enum {
 
 #ifdef __cplusplus
 
-class epicsShareClass epicsEvent {
+class LIBCOM_API epicsEvent {
 public:
     epicsEvent ( epicsEventInitialState initial = epicsEventEmpty );
     ~epicsEvent ();
@@ -52,23 +52,23 @@ private:
 extern "C" {
 #endif /*__cplusplus */
 
-epicsShareFunc epicsEventId epicsEventCreate(
+LIBCOM_API epicsEventId epicsEventCreate(
     epicsEventInitialState initialState);
-epicsShareFunc epicsEventId epicsEventMustCreate (
+LIBCOM_API epicsEventId epicsEventMustCreate (
     epicsEventInitialState initialState);
-epicsShareFunc void epicsEventDestroy(epicsEventId id);
-epicsShareFunc epicsEventStatus epicsEventTrigger(
+LIBCOM_API void epicsEventDestroy(epicsEventId id);
+LIBCOM_API epicsEventStatus epicsEventTrigger(
     epicsEventId id);
-epicsShareFunc void epicsEventMustTrigger(epicsEventId id);
+LIBCOM_API void epicsEventMustTrigger(epicsEventId id);
 #define epicsEventSignal(ID) epicsEventMustTrigger(ID)
-epicsShareFunc epicsEventStatus epicsEventWait(
+LIBCOM_API epicsEventStatus epicsEventWait(
     epicsEventId id);
-epicsShareFunc void epicsEventMustWait(epicsEventId id);
-epicsShareFunc epicsEventStatus epicsEventWaitWithTimeout(
+LIBCOM_API void epicsEventMustWait(epicsEventId id);
+LIBCOM_API epicsEventStatus epicsEventWaitWithTimeout(
     epicsEventId id, double timeOut);
-epicsShareFunc epicsEventStatus epicsEventTryWait(
+LIBCOM_API epicsEventStatus epicsEventTryWait(
     epicsEventId id);
-epicsShareFunc void epicsEventShow(
+LIBCOM_API void epicsEventShow(
     epicsEventId id, unsigned int level);
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/osi/epicsFindSymbol.h b/modules/libcom/src/osi/epicsFindSymbol.h
index 9935834..e457004 100644
--- a/modules/libcom/src/osi/epicsFindSymbol.h
+++ b/modules/libcom/src/osi/epicsFindSymbol.h
@@ -13,11 +13,11 @@
 extern "C" {
 #endif
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
-epicsShareFunc void * epicsLoadLibrary(const char *name);
-epicsShareFunc const char *epicsLoadError(void);
-epicsShareFunc void * epicsShareAPI epicsFindSymbol(const char *name);
+LIBCOM_API void * epicsLoadLibrary(const char *name);
+LIBCOM_API const char *epicsLoadError(void);
+LIBCOM_API void * LIBCOMSTD_API epicsFindSymbol(const char *name);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/epicsGeneralTime.c b/modules/libcom/src/osi/epicsGeneralTime.c
index 87158d9..9735307 100644
--- a/modules/libcom/src/osi/epicsGeneralTime.c
+++ b/modules/libcom/src/osi/epicsGeneralTime.c
@@ -12,7 +12,6 @@
 #include <string.h>
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include "epicsTypes.h"
 #include "epicsEvent.h"
 #include "epicsMutex.h"
@@ -150,7 +149,7 @@ int generalTimeGetExceptPriority(epicsTimeStamp *pDest, int *pPrio, int ignore)
     return status;
 }
 
-int epicsShareAPI epicsTimeGetCurrent(epicsTimeStamp *pDest)
+int LIBCOMSTD_API epicsTimeGetCurrent(epicsTimeStamp *pDest)
 {
     gtProvider *ptp;
     int status = S_time_noProvider;
@@ -339,7 +338,7 @@ static int generalTimeGetEventPriority(epicsTimeStamp *pDest, int eventNumber,
     return status;
 }
 
-int epicsShareAPI epicsTimeGetEvent(epicsTimeStamp *pDest, int eventNumber)
+int LIBCOMSTD_API epicsTimeGetEvent(epicsTimeStamp *pDest, int eventNumber)
 {
     if (eventNumber == epicsTimeEventCurrentTime) {
         return epicsTimeGetCurrent(pDest);
diff --git a/modules/libcom/src/osi/epicsGeneralTime.h b/modules/libcom/src/osi/epicsGeneralTime.h
index 6bbb0b2..c6eda8c 100644
--- a/modules/libcom/src/osi/epicsGeneralTime.h
+++ b/modules/libcom/src/osi/epicsGeneralTime.h
@@ -10,7 +10,7 @@
 #ifndef INC_epicsGeneralTime_H
 #define INC_epicsGeneralTime_H
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -23,22 +23,22 @@ extern "C" {
 /* NUM_TIME_EVENTS are now allowed if supported by a custom time provider */
 /* which should provide its own advancing timestamp validation. */
 
-epicsShareFunc void generalTime_Init(void);
+LIBCOM_API void generalTime_Init(void);
 
-epicsShareFunc int  installLastResortEventProvider(void);
+LIBCOM_API int  installLastResortEventProvider(void);
 
-epicsShareFunc void generalTimeResetErrorCounts(void);
-epicsShareFunc int  generalTimeGetErrorCounts(void);
+LIBCOM_API void generalTimeResetErrorCounts(void);
+LIBCOM_API int  generalTimeGetErrorCounts(void);
 
-epicsShareFunc const char * generalTimeCurrentProviderName(void);
-epicsShareFunc const char * generalTimeEventProviderName(void);
-epicsShareFunc const char * generalTimeHighestCurrentName(void);
+LIBCOM_API const char * generalTimeCurrentProviderName(void);
+LIBCOM_API const char * generalTimeEventProviderName(void);
+LIBCOM_API const char * generalTimeHighestCurrentName(void);
 
 /* Original names, for compatibility */
 #define generalTimeCurrentTpName generalTimeCurrentProviderName
 #define generalTimeEventTpName generalTimeEventProviderName
 
-epicsShareFunc long generalTimeReport(int interest);
+LIBCOM_API long generalTimeReport(int interest);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/epicsInterrupt.h b/modules/libcom/src/osi/epicsInterrupt.h
index 93b4438..b536f0a 100644
--- a/modules/libcom/src/osi/epicsInterrupt.h
+++ b/modules/libcom/src/osi/epicsInterrupt.h
@@ -13,12 +13,12 @@
 extern "C" {
 #endif
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
-epicsShareFunc int epicsInterruptLock(void);
-epicsShareFunc void epicsInterruptUnlock(int key);
-epicsShareFunc int epicsInterruptIsInterruptContext(void);
-epicsShareFunc void epicsInterruptContextMessage(const char *message);
+LIBCOM_API int epicsInterruptLock(void);
+LIBCOM_API void epicsInterruptUnlock(int key);
+LIBCOM_API int epicsInterruptIsInterruptContext(void);
+LIBCOM_API void epicsInterruptContextMessage(const char *message);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/epicsMath.cpp b/modules/libcom/src/osi/epicsMath.cpp
index 1388e65..3cfca0a 100644
--- a/modules/libcom/src/osi/epicsMath.cpp
+++ b/modules/libcom/src/osi/epicsMath.cpp
@@ -6,7 +6,6 @@
 \*************************************************************************/
 /* epicsMath.cpp */
 
-#define epicsExportSharedSymbols
 #include <epicsMath.h>
 
 #ifdef _MSC_VER
@@ -33,8 +32,8 @@ static float makeINF ( void )
 #endif
 
 extern "C" {
-epicsShareDef float epicsNAN = NAN;
-epicsShareDef float epicsINF = INFINITY;
+float epicsNAN = NAN;
+float epicsINF = INFINITY;
 }
 
 #ifdef _MSC_VER
diff --git a/modules/libcom/src/osi/epicsMessageQueue.cpp b/modules/libcom/src/osi/epicsMessageQueue.cpp
index 1527b3d..b5c1ad9 100644
--- a/modules/libcom/src/osi/epicsMessageQueue.cpp
+++ b/modules/libcom/src/osi/epicsMessageQueue.cpp
@@ -15,7 +15,6 @@
 
 #include <new>
 
-#define epicsExportSharedSymbols
 #include "epicsMessageQueue.h"
 #include "epicsStdio.h"
 
diff --git a/modules/libcom/src/osi/epicsMessageQueue.h b/modules/libcom/src/osi/epicsMessageQueue.h
index c6a98fd..9bd7fbd 100644
--- a/modules/libcom/src/osi/epicsMessageQueue.h
+++ b/modules/libcom/src/osi/epicsMessageQueue.h
@@ -20,13 +20,13 @@
 #define epicsMessageQueueh
 
 #include "epicsAssert.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 typedef struct epicsMessageQueueOSD *epicsMessageQueueId;
 
 #ifdef __cplusplus
 
-class epicsShareClass epicsMessageQueue {
+class LIBCOM_API epicsMessageQueue {
 public:
     epicsMessageQueue ( unsigned int capacity,
                         unsigned int maximumMessageSize );
@@ -52,40 +52,40 @@ private: /* Prevent compiler-generated member functions */
 extern "C" {
 #endif /*__cplusplus */
 
-epicsShareFunc epicsMessageQueueId epicsShareAPI epicsMessageQueueCreate(
+LIBCOM_API epicsMessageQueueId LIBCOMSTD_API epicsMessageQueueCreate(
     unsigned int capacity,
     unsigned int maximumMessageSize);
-epicsShareFunc void epicsShareAPI epicsMessageQueueDestroy(
+LIBCOM_API void LIBCOMSTD_API epicsMessageQueueDestroy(
     epicsMessageQueueId id);
-epicsShareFunc int epicsShareAPI epicsMessageQueueTrySend(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueTrySend(
     epicsMessageQueueId id,
     void *message,
     unsigned int messageSize);
-epicsShareFunc int epicsShareAPI epicsMessageQueueSend(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueSend(
     epicsMessageQueueId id,
     void *message,
     unsigned int messageSize);
-epicsShareFunc int epicsShareAPI epicsMessageQueueSendWithTimeout(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueSendWithTimeout(
     epicsMessageQueueId id,
     void *message,
     unsigned int messageSize,
     double timeout);
-epicsShareFunc int epicsShareAPI epicsMessageQueueTryReceive(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueTryReceive(
     epicsMessageQueueId id,
     void *message,
     unsigned int size);
-epicsShareFunc int epicsShareAPI epicsMessageQueueReceive(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueReceive(
     epicsMessageQueueId id,
     void *message,
     unsigned int size);
-epicsShareFunc int epicsShareAPI epicsMessageQueueReceiveWithTimeout(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueReceiveWithTimeout(
     epicsMessageQueueId id,
     void *message,
     unsigned int size,
     double timeout);
-epicsShareFunc int epicsShareAPI epicsMessageQueuePending(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueuePending(
     epicsMessageQueueId id);
-epicsShareFunc void epicsShareAPI epicsMessageQueueShow(
+LIBCOM_API void LIBCOMSTD_API epicsMessageQueueShow(
     epicsMessageQueueId id,
     int level);
 
diff --git a/modules/libcom/src/osi/epicsMutex.cpp b/modules/libcom/src/osi/epicsMutex.cpp
index 0354311..6d20536 100644
--- a/modules/libcom/src/osi/epicsMutex.cpp
+++ b/modules/libcom/src/osi/epicsMutex.cpp
@@ -25,7 +25,6 @@
 #include <stdio.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 #include "epicsThread.h"
 #include "valgrind/valgrind.h"
@@ -83,7 +82,7 @@ static void epicsMutexOsiInit(void *) {
     epicsMutexGlobalLock = epicsMutexOsdCreate();
 }
 
-epicsMutexId epicsShareAPI epicsMutexOsiCreate(
+epicsMutexId LIBCOMSTD_API epicsMutexOsiCreate(
     const char *pFileName,int lineno)
 {
     epicsMutexOSD * id;
@@ -117,7 +116,7 @@ epicsMutexId epicsShareAPI epicsMutexOsiCreate(
     return(pmutexNode);
 }
 
-epicsMutexId epicsShareAPI epicsMutexOsiMustCreate(
+epicsMutexId LIBCOMSTD_API epicsMutexOsiMustCreate(
     const char *pFileName,int lineno)
 {
     epicsMutexId id = epicsMutexOsiCreate(pFileName,lineno);
@@ -125,7 +124,7 @@ epicsMutexId epicsShareAPI epicsMutexOsiMustCreate(
     return(id );
 }
 
-void epicsShareAPI epicsMutexDestroy(epicsMutexId pmutexNode)
+void LIBCOMSTD_API epicsMutexDestroy(epicsMutexId pmutexNode)
 {
     epicsMutexLockStatus lockStat =
         epicsMutexOsdLock(epicsMutexGlobalLock);
@@ -138,12 +137,12 @@ void epicsShareAPI epicsMutexDestroy(epicsMutexId pmutexNode)
     epicsMutexOsdUnlock(epicsMutexGlobalLock);
 }
 
-void epicsShareAPI epicsMutexUnlock(epicsMutexId pmutexNode)
+void LIBCOMSTD_API epicsMutexUnlock(epicsMutexId pmutexNode)
 {
     epicsMutexOsdUnlock(pmutexNode->id);
 }
 
-epicsMutexLockStatus epicsShareAPI epicsMutexLock(
+epicsMutexLockStatus LIBCOMSTD_API epicsMutexLock(
     epicsMutexId pmutexNode)
 {
     epicsMutexLockStatus status = 
@@ -156,7 +155,7 @@ epicsMutexLockStatus epicsShareAPI epicsMutexLock(
     return status;
 }
 
-epicsMutexLockStatus epicsShareAPI epicsMutexTryLock(
+epicsMutexLockStatus LIBCOMSTD_API epicsMutexTryLock(
     epicsMutexId pmutexNode)
 {
     epicsMutexLockStatus status = 
@@ -189,7 +188,7 @@ void epicsMutexCleanup(void)
     epicsMutexOsdUnlock(epicsMutexGlobalLock);
 }
 
-void epicsShareAPI epicsMutexShow(
+void LIBCOMSTD_API epicsMutexShow(
     epicsMutexId pmutexNode, unsigned  int level)
 {
 #   ifdef LOG_LAST_OWNER
@@ -215,7 +214,7 @@ void epicsShareAPI epicsMutexShow(
     }
 }
 
-void epicsShareAPI epicsMutexShowAll(int onlyLocked,unsigned  int level)
+void LIBCOMSTD_API epicsMutexShowAll(int onlyLocked,unsigned  int level)
 {
     epicsMutexParm *pmutexNode;
 
diff --git a/modules/libcom/src/osi/epicsMutex.h b/modules/libcom/src/osi/epicsMutex.h
index 070efd0..13a9ce1 100644
--- a/modules/libcom/src/osi/epicsMutex.h
+++ b/modules/libcom/src/osi/epicsMutex.h
@@ -12,7 +12,7 @@
 
 #include "epicsAssert.h"
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 typedef struct epicsMutexParm *epicsMutexId;
 typedef enum {
@@ -26,7 +26,7 @@ typedef enum {
 
 #define newEpicsMutex new epicsMutex(__FILE__,__LINE__)
 
-class epicsShareClass epicsMutex {
+class LIBCOM_API epicsMutex {
 public:
     typedef epicsGuard<epicsMutex> guard_t;
     typedef epicsGuard<epicsMutex> release_t;
@@ -49,7 +49,7 @@ private:
     epicsMutex & operator = ( const epicsMutex & );
 };
 
-class epicsShareClass epicsDeadlockDetectMutex {
+class LIBCOM_API epicsDeadlockDetectMutex {
 public:
     typedef epicsGuard<epicsDeadlockDetectMutex> guard_t;
     typedef epicsGuard<epicsDeadlockDetectMutex> release_t;
@@ -75,24 +75,24 @@ extern "C" {
 #endif /*__cplusplus*/
 
 #define epicsMutexCreate() epicsMutexOsiCreate(__FILE__,__LINE__)
-epicsShareFunc epicsMutexId epicsShareAPI epicsMutexOsiCreate(
+LIBCOM_API epicsMutexId LIBCOMSTD_API epicsMutexOsiCreate(
     const char *pFileName,int lineno);
 #define epicsMutexMustCreate() epicsMutexOsiMustCreate(__FILE__,__LINE__)
-epicsShareFunc epicsMutexId epicsShareAPI epicsMutexOsiMustCreate(
+LIBCOM_API epicsMutexId LIBCOMSTD_API epicsMutexOsiMustCreate(
     const char *pFileName,int lineno);
-epicsShareFunc void epicsShareAPI epicsMutexDestroy(epicsMutexId id);
-epicsShareFunc void epicsShareAPI epicsMutexUnlock(epicsMutexId id);
-epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexLock(
+LIBCOM_API void LIBCOMSTD_API epicsMutexDestroy(epicsMutexId id);
+LIBCOM_API void LIBCOMSTD_API epicsMutexUnlock(epicsMutexId id);
+LIBCOM_API epicsMutexLockStatus LIBCOMSTD_API epicsMutexLock(
     epicsMutexId id);
 #define epicsMutexMustLock(ID) {                        \
     epicsMutexLockStatus status = epicsMutexLock(ID);   \
     assert(status == epicsMutexLockOK);                 \
 }
-epicsShareFunc epicsMutexLockStatus epicsShareAPI epicsMutexTryLock(
+LIBCOM_API epicsMutexLockStatus LIBCOMSTD_API epicsMutexTryLock(
     epicsMutexId id);
-epicsShareFunc void epicsShareAPI epicsMutexShow(
+LIBCOM_API void LIBCOMSTD_API epicsMutexShow(
     epicsMutexId id,unsigned  int level);
-epicsShareFunc void epicsShareAPI epicsMutexShowAll(
+LIBCOM_API void LIBCOMSTD_API epicsMutexShowAll(
     int onlyLocked,unsigned  int level);
 
 /*NOTES:
diff --git a/modules/libcom/src/osi/epicsReadline.c b/modules/libcom/src/osi/epicsReadline.c
index 0caa50f..c00a375 100644
--- a/modules/libcom/src/osi/epicsReadline.c
+++ b/modules/libcom/src/osi/epicsReadline.c
@@ -11,7 +11,6 @@
 #include <stdlib.h>
 #include <errno.h>
 
-#define epicsExportSharedSymbols
 #include "envDefs.h"
 #include "epicsReadline.h"
 
@@ -61,7 +60,7 @@ static void osdReadlineEnd(struct readlineContext *rc) {}
 /*
  * Create a command-line context
  */
-void * epicsShareAPI
+void * LIBCOMSTD_API
 epicsReadlineBegin(FILE *in)
 {
     struct readlineContext *rc = calloc(1, sizeof(*rc));
@@ -78,7 +77,7 @@ epicsReadlineBegin(FILE *in)
 /*
  * Read a line of input
  */
-char * epicsShareAPI
+char * LIBCOMSTD_API
 epicsReadline (const char *prompt, void *context)
 {
     struct readlineContext *rc = context;
@@ -138,7 +137,7 @@ epicsReadline (const char *prompt, void *context)
 /*
  * Destroy a command-line context
  */
-void epicsShareAPI
+void LIBCOMSTD_API
 epicsReadlineEnd (void *context)
 {
     if (context) {
diff --git a/modules/libcom/src/osi/epicsReadline.h b/modules/libcom/src/osi/epicsReadline.h
index 1d0e8b7..d93b67f 100644
--- a/modules/libcom/src/osi/epicsReadline.h
+++ b/modules/libcom/src/osi/epicsReadline.h
@@ -13,12 +13,12 @@
 extern "C" {
 #endif
 
-#include <shareLib.h>
+#include <libComAPI.h>
 #include <stdio.h>
 
-epicsShareFunc void * epicsShareAPI epicsReadlineBegin (FILE *in);
-epicsShareFunc char * epicsShareAPI epicsReadline (const char *prompt, void *context);
-epicsShareFunc void   epicsShareAPI epicsReadlineEnd (void *context);
+LIBCOM_API void * LIBCOMSTD_API epicsReadlineBegin (FILE *in);
+LIBCOM_API char * LIBCOMSTD_API epicsReadline (const char *prompt, void *context);
+LIBCOM_API void   LIBCOMSTD_API epicsReadlineEnd (void *context);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/epicsSignal.h b/modules/libcom/src/osi/epicsSignal.h
index 79adf71..fdfa18b 100644
--- a/modules/libcom/src/osi/epicsSignal.h
+++ b/modules/libcom/src/osi/epicsSignal.h
@@ -14,7 +14,7 @@
 extern "C" {
 #endif
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 /* 
  * The requests in this interface are typically ignored on OS that do not implement
@@ -27,20 +27,20 @@ struct epicsThreadOSD;
  * Required to avoid problems with soft IOCs getting SIGHUPs when a
  * Channel Access client disconnects
  */
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigHupIgnore ( void );
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigHupIgnore ( void );
 
 /* 
  * Required to avoid terminating a process which is blocking in a 
  * socket send() call when the SIGPIPE signal is generated by the OS.
  */
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore ( void );
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigPipeIgnore ( void );
 
 /* 
  * required only if shutdown() and close() do not interrupt a thread blocking in
  * a socket system call
  */
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigAlarmIgnore ( void );
-epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * );
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigAlarmIgnore ( void );
+LIBCOM_API void LIBCOMSTD_API epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * );
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/epicsSpin.h b/modules/libcom/src/osi/epicsSpin.h
index 22ce8ec..1b089da 100644
--- a/modules/libcom/src/osi/epicsSpin.h
+++ b/modules/libcom/src/osi/epicsSpin.h
@@ -9,7 +9,7 @@
 #ifndef epicsSpinh
 #define epicsSpinh
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -17,13 +17,13 @@ extern "C" {
 
 typedef struct epicsSpin *epicsSpinId;
 
-epicsShareFunc epicsSpinId epicsSpinCreate(void);
-epicsShareFunc epicsSpinId epicsSpinMustCreate(void);
-epicsShareFunc void epicsSpinDestroy(epicsSpinId);
+LIBCOM_API epicsSpinId epicsSpinCreate(void);
+LIBCOM_API epicsSpinId epicsSpinMustCreate(void);
+LIBCOM_API void epicsSpinDestroy(epicsSpinId);
 
-epicsShareFunc void epicsSpinLock(epicsSpinId);
-epicsShareFunc int epicsSpinTryLock(epicsSpinId);
-epicsShareFunc void epicsSpinUnlock(epicsSpinId);
+LIBCOM_API void epicsSpinLock(epicsSpinId);
+LIBCOM_API int epicsSpinTryLock(epicsSpinId);
+LIBCOM_API void epicsSpinUnlock(epicsSpinId);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/epicsStackTrace.c b/modules/libcom/src/osi/epicsStackTrace.c
index 0fe6928..e3054ef 100644
--- a/modules/libcom/src/osi/epicsStackTrace.c
+++ b/modules/libcom/src/osi/epicsStackTrace.c
@@ -9,7 +9,6 @@
 
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include "epicsThread.h"
 #include "epicsMutex.h"
 #include "errlog.h"
diff --git a/modules/libcom/src/osi/epicsStackTrace.h b/modules/libcom/src/osi/epicsStackTrace.h
index 885e90a..a293876 100644
--- a/modules/libcom/src/osi/epicsStackTrace.h
+++ b/modules/libcom/src/osi/epicsStackTrace.h
@@ -10,14 +10,14 @@
 #ifndef INC_epicsStackTrace_H
 #define INC_epicsStackTrace_H
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 /* Dump a stack trace to the errlog */
-epicsShareFunc void epicsStackTrace(void);
+LIBCOM_API void epicsStackTrace(void);
 
 /* Inquire about functionality implemented on your system */
 
@@ -34,7 +34,7 @@ epicsShareFunc void epicsStackTrace(void);
 #define EPICS_STACKTRACE_LCL_SYMBOLS (1<<3)
 
 /* returns ORed bitset of supported features    */
-epicsShareFunc int epicsStackTraceGetFeatures(void);
+LIBCOM_API int epicsStackTraceGetFeatures(void);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/epicsStackTracePvt.h b/modules/libcom/src/osi/epicsStackTracePvt.h
index de26044..00b013d 100644
--- a/modules/libcom/src/osi/epicsStackTracePvt.h
+++ b/modules/libcom/src/osi/epicsStackTracePvt.h
@@ -10,7 +10,7 @@
 #ifndef INC_epicsStackTracePvt_H
 #define INC_epicsStackTracePvt_H
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 typedef struct epicsSymbol {
 	const char *f_nam;  /* file where the symbol is defined  */
@@ -25,7 +25,7 @@ extern "C" {
 /* Take a snapshot of the stack into 'buf' (limited to buf_sz entries)
  * RETURNS: actual number of entries in 'buf'
  */
-epicsShareFunc int epicsBackTrace(void **buf, int buf_sz);
+LIBCOM_API int epicsBackTrace(void **buf, int buf_sz);
 
 /* Find symbol closest to 'addr'.
  * 
@@ -36,10 +36,10 @@ epicsShareFunc int epicsBackTrace(void **buf, int buf_sz);
  * RETURNS: 0 on success, nonzero on failure (not finding an address
  *          is not considered an error).
  */
-epicsShareFunc int epicsFindAddr(void *addr, epicsSymbol *sym_p);
+LIBCOM_API int epicsFindAddr(void *addr, epicsSymbol *sym_p);
 
 /* report supported features (as reported by epicsStackTraceGetFeatures) */
-epicsShareFunc int epicsFindAddrGetFeatures();
+LIBCOM_API int epicsFindAddrGetFeatures();
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/epicsStdio.c b/modules/libcom/src/osi/epicsStdio.c
index 52b65bb..5dc82e1 100644
--- a/modules/libcom/src/osi/epicsStdio.c
+++ b/modules/libcom/src/osi/epicsStdio.c
@@ -18,9 +18,8 @@
 #include <fcntl.h>
 #include <errno.h>
 
-#define epicsExportSharedSymbols
 #define epicsStdioStdStreams
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "epicsThread.h"
 #include "epicsStdio.h"
 
@@ -36,7 +35,7 @@ static void once(void *junk)
     stderrThreadPrivateId = epicsThreadPrivateCreate();
 }
 
-FILE * epicsShareAPI epicsGetStdin(void)
+FILE * LIBCOMSTD_API epicsGetStdin(void)
 {
     FILE *fp = epicsGetThreadStdin();
 
@@ -45,7 +44,7 @@ FILE * epicsShareAPI epicsGetStdin(void)
     return fp;
 }
 
-FILE * epicsShareAPI epicsGetStdout(void)
+FILE * LIBCOMSTD_API epicsGetStdout(void)
 {
     FILE *fp = epicsGetThreadStdout();
 
@@ -54,7 +53,7 @@ FILE * epicsShareAPI epicsGetStdout(void)
     return fp;
 }
 
-FILE * epicsShareAPI epicsGetStderr(void)
+FILE * LIBCOMSTD_API epicsGetStderr(void)
 {
     FILE *fp = epicsGetThreadStderr();
 
@@ -63,19 +62,19 @@ FILE * epicsShareAPI epicsGetStderr(void)
     return fp;
 }
 
-FILE * epicsShareAPI epicsGetThreadStdin(void)
+FILE * LIBCOMSTD_API epicsGetThreadStdin(void)
 {
     epicsThreadOnce(&onceId,once,0);
     return epicsThreadPrivateGet(stdinThreadPrivateId);
 }
 
-FILE * epicsShareAPI epicsGetThreadStdout(void)
+FILE * LIBCOMSTD_API epicsGetThreadStdout(void)
 {
     epicsThreadOnce(&onceId,once,0);
     return epicsThreadPrivateGet(stdoutThreadPrivateId);
 }
 
-FILE * epicsShareAPI epicsGetThreadStderr(void)
+FILE * LIBCOMSTD_API epicsGetThreadStderr(void)
 {
     /* Deliberately don't do the epicsThreadOnce() here; epicsThreadInit()
      * is allowed to use stderr inside its once() routine, in which case we
@@ -88,25 +87,25 @@ FILE * epicsShareAPI epicsGetThreadStderr(void)
     return epicsThreadPrivateGet(stderrThreadPrivateId);
 }
 
-void  epicsShareAPI epicsSetThreadStdin(FILE *fp)
+void  LIBCOMSTD_API epicsSetThreadStdin(FILE *fp)
 {
     epicsThreadOnce(&onceId,once,0);
     epicsThreadPrivateSet(stdinThreadPrivateId,fp);
 }
 
-void  epicsShareAPI epicsSetThreadStdout(FILE *fp)
+void  LIBCOMSTD_API epicsSetThreadStdout(FILE *fp)
 {
     epicsThreadOnce(&onceId,once,0);
     epicsThreadPrivateSet(stdoutThreadPrivateId,fp);
 }
 
-void  epicsShareAPI epicsSetThreadStderr(FILE *fp)
+void  LIBCOMSTD_API epicsSetThreadStderr(FILE *fp)
 {
     epicsThreadOnce(&onceId,once,0);
     epicsThreadPrivateSet(stderrThreadPrivateId,fp);
 }
 
-int epicsShareAPI epicsStdoutPrintf(const char *pFormat, ...)
+int LIBCOMSTD_API epicsStdoutPrintf(const char *pFormat, ...)
 {
     va_list     pvar;
     int         nchar;
@@ -118,12 +117,12 @@ int epicsShareAPI epicsStdoutPrintf(const char *pFormat, ...)
     return nchar;
 }
 
-int epicsShareAPI epicsStdoutPuts(const char *str)
+int LIBCOMSTD_API epicsStdoutPuts(const char *str)
 {
     return fprintf(epicsGetStdout(), "%s\n", str);
 }
 
-int epicsShareAPI epicsStdoutPutchar(int c)
+int LIBCOMSTD_API epicsStdoutPutchar(int c)
 {
     return putc(c, epicsGetStdout());
 }
diff --git a/modules/libcom/src/osi/epicsStdio.h b/modules/libcom/src/osi/epicsStdio.h
index 9ef0b22..779de6c 100644
--- a/modules/libcom/src/osi/epicsStdio.h
+++ b/modules/libcom/src/osi/epicsStdio.h
@@ -15,7 +15,7 @@
 #include <stdio.h>
 #include <stdarg.h>
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "compilerDependencies.h"
 #include "epicsTempFile.h"
 
@@ -51,9 +51,9 @@ extern "C" {
 #  define putchar epicsStdoutPutchar
 #endif
 
-epicsShareFunc int epicsShareAPI epicsSnprintf(
+LIBCOM_API int LIBCOMSTD_API epicsSnprintf(
     char *str, size_t size, const char *format, ...) EPICS_PRINTF_STYLE(3,4);
-epicsShareFunc int epicsShareAPI epicsVsnprintf(
+LIBCOM_API int LIBCOMSTD_API epicsVsnprintf(
     char *str, size_t size, const char *format, va_list ap);
 
 /*
@@ -68,24 +68,24 @@ epicsShareFunc int epicsShareAPI epicsVsnprintf(
  * TF_ERROR if the file could not be truncated.
  */
 enum TF_RETURN {TF_OK=0, TF_ERROR=1};
-epicsShareFunc enum TF_RETURN truncateFile ( const char *pFileName, unsigned long size );
+LIBCOM_API enum TF_RETURN truncateFile ( const char *pFileName, unsigned long size );
 
 /* The following are for redirecting stdin,stdout,stderr */
-epicsShareFunc FILE * epicsShareAPI epicsGetStdin(void);
-epicsShareFunc FILE * epicsShareAPI epicsGetStdout(void);
-epicsShareFunc FILE * epicsShareAPI epicsGetStderr(void);
+LIBCOM_API FILE * LIBCOMSTD_API epicsGetStdin(void);
+LIBCOM_API FILE * LIBCOMSTD_API epicsGetStdout(void);
+LIBCOM_API FILE * LIBCOMSTD_API epicsGetStderr(void);
 /* These are intended for iocsh only */
-epicsShareFunc FILE * epicsShareAPI epicsGetThreadStdin(void);
-epicsShareFunc FILE * epicsShareAPI epicsGetThreadStdout(void);
-epicsShareFunc FILE * epicsShareAPI epicsGetThreadStderr(void);
-epicsShareFunc void  epicsShareAPI epicsSetThreadStdin(FILE *);
-epicsShareFunc void  epicsShareAPI epicsSetThreadStdout(FILE *);
-epicsShareFunc void  epicsShareAPI epicsSetThreadStderr(FILE *);
-
-epicsShareFunc int epicsShareAPI epicsStdoutPrintf(
+LIBCOM_API FILE * LIBCOMSTD_API epicsGetThreadStdin(void);
+LIBCOM_API FILE * LIBCOMSTD_API epicsGetThreadStdout(void);
+LIBCOM_API FILE * LIBCOMSTD_API epicsGetThreadStderr(void);
+LIBCOM_API void  LIBCOMSTD_API epicsSetThreadStdin(FILE *);
+LIBCOM_API void  LIBCOMSTD_API epicsSetThreadStdout(FILE *);
+LIBCOM_API void  LIBCOMSTD_API epicsSetThreadStderr(FILE *);
+
+LIBCOM_API int LIBCOMSTD_API epicsStdoutPrintf(
     const char *pformat, ...) EPICS_PRINTF_STYLE(1,2);
-epicsShareFunc int epicsShareAPI epicsStdoutPuts(const char *str);
-epicsShareFunc int epicsShareAPI epicsStdoutPutchar(int c);
+LIBCOM_API int LIBCOMSTD_API epicsStdoutPuts(const char *str);
+LIBCOM_API int LIBCOMSTD_API epicsStdoutPutchar(int c);
 
 #ifdef  __cplusplus
 }
diff --git a/modules/libcom/src/osi/epicsTempFile.h b/modules/libcom/src/osi/epicsTempFile.h
index e20879d..6d23fd2 100644
--- a/modules/libcom/src/osi/epicsTempFile.h
+++ b/modules/libcom/src/osi/epicsTempFile.h
@@ -14,13 +14,13 @@
 
 #include <stdio.h>
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
-epicsShareFunc FILE * epicsShareAPI epicsTempFile(void);
+LIBCOM_API FILE * LIBCOMSTD_API epicsTempFile(void);
 
 #ifdef  __cplusplus
 }
diff --git a/modules/libcom/src/osi/epicsTempFilex.cpp b/modules/libcom/src/osi/epicsTempFilex.cpp
new file mode 100644
index 0000000..72e7d3a
--- /dev/null
+++ b/modules/libcom/src/osi/epicsTempFilex.cpp
@@ -0,0 +1,5 @@
+// special build for direct inclusion in e_flex and antelope executables
+#undef LIBCOM_API_BUILDING
+#undef EPICS_BUILD_DLL
+#undef EPICS_CALL_DLL
+#include <epicsTempFile.cpp>
diff --git a/modules/libcom/src/osi/epicsThread.cpp b/modules/libcom/src/osi/epicsThread.cpp
index 813f2df..2f0b006 100644
--- a/modules/libcom/src/osi/epicsThread.cpp
+++ b/modules/libcom/src/osi/epicsThread.cpp
@@ -21,7 +21,6 @@
 // The following is required for Solaris builds
 #undef __EXTENSIONS__
 
-#define epicsExportSharedSymbols
 #include "epicsAlgorithm.h"
 #include "epicsTime.h"
 #include "epicsThread.h"
@@ -31,7 +30,7 @@
 
 using namespace std;
 
-epicsThreadId epicsShareAPI epicsThreadCreate (
+epicsThreadId LIBCOMSTD_API epicsThreadCreate (
     const char * name, unsigned int priority, unsigned int stackSize,
     EPICSTHREADFUNC funptr,void * parm )
 {
@@ -356,7 +355,7 @@ extern "C" {
         okToBlockPrivate = epicsThreadPrivateCreate();
     }
 
-    int epicsShareAPI epicsThreadIsOkToBlock(void)
+    int LIBCOMSTD_API epicsThreadIsOkToBlock(void)
     {
         const int *pokToBlock;
         epicsThreadOnce(&okToBlockOnce, epicsThreadOnceIdInit, NULL);
@@ -364,7 +363,7 @@ extern "C" {
         return (pokToBlock ? *pokToBlock : 0);
     }
 
-    void epicsShareAPI epicsThreadSetOkToBlock(int isOkToBlock)
+    void LIBCOMSTD_API epicsThreadSetOkToBlock(int isOkToBlock)
     {
         const int *pokToBlock;
         epicsThreadOnce(&okToBlockOnce, epicsThreadOnceIdInit, NULL);
@@ -372,7 +371,7 @@ extern "C" {
         epicsThreadPrivateSet(okToBlockPrivate, (void *)pokToBlock);
     }
 
-    epicsThreadId epicsShareAPI epicsThreadMustCreate (
+    epicsThreadId LIBCOMSTD_API epicsThreadMustCreate (
         const char *name, unsigned int priority, unsigned int stackSize,
         EPICSTHREADFUNC funptr,void *parm)
     {
diff --git a/modules/libcom/src/osi/epicsThread.h b/modules/libcom/src/osi/epicsThread.h
index da16a0b..b758ce2 100644
--- a/modules/libcom/src/osi/epicsThread.h
+++ b/modules/libcom/src/osi/epicsThread.h
@@ -12,7 +12,7 @@
 
 #include <stddef.h>
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -46,7 +46,7 @@ typedef enum {
 } epicsThreadBooleanStatus;
 
 /** Lookup target specific default stack size */
-epicsShareFunc unsigned int epicsShareAPI epicsThreadGetStackSize(
+LIBCOM_API unsigned int LIBCOMSTD_API epicsThreadGetStackSize(
     epicsThreadStackSizeClass size);
 
 /* (epicsThreadId)0 is guaranteed to be an invalid thread id */
@@ -69,16 +69,16 @@ typedef epicsThreadId epicsThreadOnceId;
  * }
  * @endcode
  */
-epicsShareFunc void epicsShareAPI epicsThreadOnce(
+LIBCOM_API void LIBCOMSTD_API epicsThreadOnce(
     epicsThreadOnceId *id, EPICSTHREADFUNC, void *arg);
 
 /* When real-time scheduling is active, attempt any post-init operations
  * that preserve real-time performance. For POSIX targets this locks the
  * process into RAM, preventing swap-related VM faults.
  */
-epicsShareFunc void epicsThreadRealtimeLock(void);
+LIBCOM_API void epicsThreadRealtimeLock(void);
 
-epicsShareFunc void epicsShareAPI epicsThreadExitMain(void);
+LIBCOM_API void LIBCOMSTD_API epicsThreadExitMain(void);
 
 /** For use with epicsThreadCreateOpt() */
 typedef struct epicsThreadOpts {
@@ -110,69 +110,69 @@ typedef struct epicsThreadOpts {
  * @param opts Modifiers for the new thread, or NULL to use target specific defaults.
  * @return NULL on error
  */
-epicsShareFunc epicsThreadId epicsThreadCreateOpt (
+LIBCOM_API epicsThreadId epicsThreadCreateOpt (
     const char * name,
     EPICSTHREADFUNC funptr, void * parm,
     const epicsThreadOpts *opts );
 /** Short-hand for epicsThreadCreateOpt() to create an un-joinable thread. */
-epicsShareFunc epicsThreadId epicsShareAPI epicsThreadCreate (
+LIBCOM_API epicsThreadId LIBCOMSTD_API epicsThreadCreate (
     const char * name, unsigned int priority, unsigned int stackSize,
     EPICSTHREADFUNC funptr,void * parm );
 /** Short-hand for epicsThreadCreateOpt() to create an un-joinable thread.
  * On error calls cantProceed()
  */
-epicsShareFunc epicsThreadId epicsShareAPI epicsThreadMustCreate (
+LIBCOM_API epicsThreadId LIBCOMSTD_API epicsThreadMustCreate (
     const char * name, unsigned int priority, unsigned int stackSize,
     EPICSTHREADFUNC funptr,void * parm );
 
 /* This gets undefined in osdThread.h on VxWorks < 6.9 */
 #define EPICS_THREAD_CAN_JOIN
 /** Wait for a joinable thread to exit (return from its main function) */
-epicsShareFunc void epicsThreadMustJoin(epicsThreadId id);
+LIBCOM_API void epicsThreadMustJoin(epicsThreadId id);
 /** Block the current thread until epicsThreadResume(). */
-epicsShareFunc void epicsShareAPI epicsThreadSuspendSelf(void);
+LIBCOM_API void LIBCOMSTD_API epicsThreadSuspendSelf(void);
 /** Resume a thread suspended with epicsThreadSuspendSelf() */
-epicsShareFunc void epicsShareAPI epicsThreadResume(epicsThreadId id);
+LIBCOM_API void LIBCOMSTD_API epicsThreadResume(epicsThreadId id);
 /** Return thread OSI priority */
-epicsShareFunc unsigned int epicsShareAPI epicsThreadGetPriority(
+LIBCOM_API unsigned int LIBCOMSTD_API epicsThreadGetPriority(
     epicsThreadId id);
 /** Return thread OSI priority */
-epicsShareFunc unsigned int epicsShareAPI epicsThreadGetPrioritySelf(void);
+LIBCOM_API unsigned int LIBCOMSTD_API epicsThreadGetPrioritySelf(void);
 /** Change OSI priority of target thread. */
-epicsShareFunc void epicsShareAPI epicsThreadSetPriority(
+LIBCOM_API void LIBCOMSTD_API epicsThreadSetPriority(
     epicsThreadId id,unsigned int priority);
 /** Lookup the next usage OSI priority such that priority > *pPriorityJustBelow
  *  if this is possible with the current target configuration and privlages.
  */
-epicsShareFunc epicsThreadBooleanStatus epicsShareAPI
+LIBCOM_API epicsThreadBooleanStatus LIBCOMSTD_API
     epicsThreadHighestPriorityLevelBelow (
         unsigned int priority, unsigned *pPriorityJustBelow);
 /** Lookup the next usage OSI priority such that priority < *pPriorityJustBelow
  *  if this is possible with the current target configuration and privlages.
  */
-epicsShareFunc epicsThreadBooleanStatus epicsShareAPI
+LIBCOM_API epicsThreadBooleanStatus LIBCOMSTD_API
     epicsThreadLowestPriorityLevelAbove (
         unsigned int priority, unsigned *pPriorityJustAbove);
 /** Test if two thread IDs actually refer to the same OS thread */
-epicsShareFunc int epicsShareAPI epicsThreadIsEqual(
+LIBCOM_API int LIBCOMSTD_API epicsThreadIsEqual(
     epicsThreadId id1, epicsThreadId id2);
 /** Test if thread has been suspended with epicsThreadSuspendSelf() */
-epicsShareFunc int epicsShareAPI epicsThreadIsSuspended(epicsThreadId id);
+LIBCOM_API int LIBCOMSTD_API epicsThreadIsSuspended(epicsThreadId id);
 /** @brief Block the calling thread for at least the specified time.
  * @param seconds Time to wait in seconds.  Values <=0 blocks for the shortest possible time.
  */
-epicsShareFunc void epicsShareAPI epicsThreadSleep(double seconds);
+LIBCOM_API void LIBCOMSTD_API epicsThreadSleep(double seconds);
 /** @brief Query a value approximating the OS timer/scheduler resolution.
  * @return A value in seconds >=0
  *
  * @warning On targets other than vxWorks and RTEMS, the quantum value often isn't
  *          meaningful.  Use of this function is discouraged in portable code.
  */
-epicsShareFunc double epicsShareAPI epicsThreadSleepQuantum(void);
+LIBCOM_API double LIBCOMSTD_API epicsThreadSleepQuantum(void);
 /** Find an epicsThreadId associated with the current thread.
  * For non-EPICS threads, a new epicsThreadId may be allocated.
  */
-epicsShareFunc epicsThreadId epicsShareAPI epicsThreadGetIdSelf(void);
+LIBCOM_API epicsThreadId LIBCOMSTD_API epicsThreadGetIdSelf(void);
 /** Attempt to find the first instance of a thread by name.
  * @return An epicsThreadId, or NULL if no such thread is currently running.
  *         Note that a non-NULL ID may still be invalid if this call races
@@ -181,12 +181,12 @@ epicsShareFunc epicsThreadId epicsShareAPI epicsThreadGetIdSelf(void);
  * @warning Safe use of this function requires external knowledge that this
  *          thread will not return.
  */
-epicsShareFunc epicsThreadId epicsShareAPI epicsThreadGetId(const char *name);
+LIBCOM_API epicsThreadId LIBCOMSTD_API epicsThreadGetId(const char *name);
 /** Return a value approximating the number of threads which this target
  *  can run in parallel.  This value is advisory.
  * @return >=1
  */
-epicsShareFunc int epicsThreadGetCPUs(void);
+LIBCOM_API int epicsThreadGetCPUs(void);
 
 /** Return the name of the current thread.
  *
@@ -195,7 +195,7 @@ epicsShareFunc int epicsThreadGetCPUs(void);
  * This is either a copy of the string passed to epicsThread*Create*(),
  * or an arbitrary unique string for non-EPICS threads.
  */
-epicsShareFunc const char * epicsShareAPI epicsThreadGetNameSelf(void);
+LIBCOM_API const char * LIBCOMSTD_API epicsThreadGetNameSelf(void);
 
 /** Copy out the thread name into the provided buffer.
  *
@@ -203,39 +203,39 @@ epicsShareFunc const char * epicsShareAPI epicsThreadGetNameSelf(void);
  * size is number of bytes in buffer to hold name (including terminator).
  * Failure results in an empty string stored in name.
  */
-epicsShareFunc void epicsShareAPI epicsThreadGetName(
+LIBCOM_API void LIBCOMSTD_API epicsThreadGetName(
     epicsThreadId id, char *name, size_t size);
 
-epicsShareFunc int epicsShareAPI epicsThreadIsOkToBlock(void);
-epicsShareFunc void epicsShareAPI epicsThreadSetOkToBlock(int isOkToBlock);
+LIBCOM_API int LIBCOMSTD_API epicsThreadIsOkToBlock(void);
+LIBCOM_API void LIBCOMSTD_API epicsThreadSetOkToBlock(int isOkToBlock);
 
 /** Print to stdout information about all running EPICS threads.
  * @param level 0 prints minimal output.  Higher values print more details.
  */
-epicsShareFunc void epicsShareAPI epicsThreadShowAll(unsigned int level);
+LIBCOM_API void LIBCOMSTD_API epicsThreadShowAll(unsigned int level);
 /** Print info about a single EPICS thread. */
-epicsShareFunc void epicsShareAPI epicsThreadShow(
+LIBCOM_API void LIBCOMSTD_API epicsThreadShow(
     epicsThreadId id,unsigned int level);
 
 /* Hooks called when a thread starts, map function called once for every thread */
 typedef void (*EPICS_THREAD_HOOK_ROUTINE)(epicsThreadId id);
-epicsShareFunc int epicsThreadHookAdd(EPICS_THREAD_HOOK_ROUTINE hook);
-epicsShareFunc int epicsThreadHookDelete(EPICS_THREAD_HOOK_ROUTINE hook);
-epicsShareFunc void epicsThreadHooksShow(void);
-epicsShareFunc void epicsThreadMap(EPICS_THREAD_HOOK_ROUTINE func);
+LIBCOM_API int epicsThreadHookAdd(EPICS_THREAD_HOOK_ROUTINE hook);
+LIBCOM_API int epicsThreadHookDelete(EPICS_THREAD_HOOK_ROUTINE hook);
+LIBCOM_API void epicsThreadHooksShow(void);
+LIBCOM_API void epicsThreadMap(EPICS_THREAD_HOOK_ROUTINE func);
 
 /** Thread local storage */
 typedef struct epicsThreadPrivateOSD * epicsThreadPrivateId;
 /** Allocate a new thread local variable.
  * This variable will initially hold NULL for each thread.
  */
-epicsShareFunc epicsThreadPrivateId epicsShareAPI epicsThreadPrivateCreate(void);
+LIBCOM_API epicsThreadPrivateId LIBCOMSTD_API epicsThreadPrivateCreate(void);
 /** Free a thread local variable */
-epicsShareFunc void epicsShareAPI epicsThreadPrivateDelete(epicsThreadPrivateId id);
+LIBCOM_API void LIBCOMSTD_API epicsThreadPrivateDelete(epicsThreadPrivateId id);
 /** Update thread local variable */
-epicsShareFunc void epicsShareAPI epicsThreadPrivateSet(epicsThreadPrivateId,void *);
+LIBCOM_API void LIBCOMSTD_API epicsThreadPrivateSet(epicsThreadPrivateId,void *);
 /** Fetch the current value of a thread local variable */
-epicsShareFunc void * epicsShareAPI epicsThreadPrivateGet(epicsThreadPrivateId);
+LIBCOM_API void * LIBCOMSTD_API epicsThreadPrivateGet(epicsThreadPrivateId);
 
 #ifdef __cplusplus
 }
@@ -247,7 +247,7 @@ epicsShareFunc void * epicsShareAPI epicsThreadPrivateGet(epicsThreadPrivateId);
 #include "epicsMutex.h"
 
 //! Interface used with class epicsThread
-class epicsShareClass epicsThreadRunable {
+class LIBCOM_API epicsThreadRunable {
 public:
     virtual ~epicsThreadRunable () = 0;
     //! Thread main function.
@@ -266,7 +266,7 @@ extern "C" void epicsThreadCallEntryPoint ( void * );
  *
  * @note Threads must be start() ed.
  */
-class epicsShareClass epicsThread {
+class LIBCOM_API epicsThread {
 public:
     /** Create a new thread with the provided information.
      *
@@ -338,7 +338,7 @@ private:
     class exitException {};
 };
 
-class epicsShareClass epicsThreadPrivateBase {
+class LIBCOM_API epicsThreadPrivateBase {
 public:
     class unableToCreateThreadPrivate {}; /* exception */
 protected:
diff --git a/modules/libcom/src/osi/epicsTime.cpp b/modules/libcom/src/osi/epicsTime.cpp
index f80d173..0741179 100644
--- a/modules/libcom/src/osi/epicsTime.cpp
+++ b/modules/libcom/src/osi/epicsTime.cpp
@@ -28,7 +28,6 @@
 #include <float.h>
 #include <string> // vxWorks 6.0 requires this include
 
-#define epicsExportSharedSymbols
 #include "locationException.h"
 #include "epicsAssert.h"
 #include "epicsVersion.h"
@@ -931,7 +930,7 @@ extern "C" {
     // its too bad that these cant be implemented with inline functions
     // at least when running the GNU compiler
     //
-    epicsShareFunc int epicsShareAPI epicsTimeToTime_t (time_t *pDest, const epicsTimeStamp *pSrc)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeToTime_t (time_t *pDest, const epicsTimeStamp *pSrc)
     {
         try {
             time_t_wrapper dst = epicsTime (*pSrc);
@@ -942,7 +941,7 @@ extern "C" {
         }
         return epicsTimeOK;
     }
-    epicsShareFunc int epicsShareAPI epicsTimeFromTime_t (epicsTimeStamp *pDest, time_t src)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeFromTime_t (epicsTimeStamp *pDest, time_t src)
     {
         try {
             time_t_wrapper dst;
@@ -954,7 +953,7 @@ extern "C" {
         }
         return epicsTimeOK;
     }
-    epicsShareFunc int epicsShareAPI epicsTimeToTM (struct tm *pDest, unsigned long *pNSecDest, const epicsTimeStamp *pSrc)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeToTM (struct tm *pDest, unsigned long *pNSecDest, const epicsTimeStamp *pSrc)
     {
         try {
             local_tm_nano_sec tmns = epicsTime (*pSrc);
@@ -967,7 +966,7 @@ extern "C" {
         }
         return epicsTimeOK;
     }
-    epicsShareFunc int epicsShareAPI epicsTimeToGMTM (struct tm *pDest, unsigned long *pNSecDest, const epicsTimeStamp *pSrc)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeToGMTM (struct tm *pDest, unsigned long *pNSecDest, const epicsTimeStamp *pSrc)
     {
         try {
             gm_tm_nano_sec gmtmns = epicsTime (*pSrc);
@@ -980,7 +979,7 @@ extern "C" {
         }
         return epicsTimeOK;
     }
-    epicsShareFunc int epicsShareAPI epicsTimeFromTM (epicsTimeStamp *pDest, const struct tm *pSrc, unsigned long nSecSrc)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeFromTM (epicsTimeStamp *pDest, const struct tm *pSrc, unsigned long nSecSrc)
     {
         try {
             local_tm_nano_sec tmns;
@@ -993,7 +992,7 @@ extern "C" {
         }
         return epicsTimeOK;
     }
-    epicsShareFunc int epicsShareAPI epicsTimeFromGMTM (epicsTimeStamp *pDest, const struct tm *pSrc, unsigned long nSecSrc)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeFromGMTM (epicsTimeStamp *pDest, const struct tm *pSrc, unsigned long nSecSrc)
     {
         try {
             gm_tm_nano_sec tmns;
@@ -1006,7 +1005,7 @@ extern "C" {
         }
         return epicsTimeOK;
     }
-    epicsShareFunc int epicsShareAPI epicsTimeToTimespec (struct timespec *pDest, const epicsTimeStamp *pSrc)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeToTimespec (struct timespec *pDest, const epicsTimeStamp *pSrc)
     {
         try {
             *pDest = epicsTime (*pSrc);
@@ -1016,7 +1015,7 @@ extern "C" {
         }
         return epicsTimeOK;
     }
-    epicsShareFunc int epicsShareAPI epicsTimeFromTimespec (epicsTimeStamp *pDest, const struct timespec *pSrc)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeFromTimespec (epicsTimeStamp *pDest, const struct timespec *pSrc)
     {
         try {
             *pDest = epicsTime (*pSrc);
@@ -1026,7 +1025,7 @@ extern "C" {
         }
         return epicsTimeOK;
     }
-    epicsShareFunc int epicsShareAPI epicsTimeToTimeval (struct timeval *pDest, const epicsTimeStamp *pSrc)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeToTimeval (struct timeval *pDest, const epicsTimeStamp *pSrc)
     {
         try {
             *pDest = epicsTime (*pSrc);
@@ -1036,7 +1035,7 @@ extern "C" {
         }
         return epicsTimeOK;
     }
-    epicsShareFunc int epicsShareAPI epicsTimeFromTimeval (epicsTimeStamp *pDest, const struct timeval *pSrc)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeFromTimeval (epicsTimeStamp *pDest, const struct timeval *pSrc)
     {
         try {
             *pDest = epicsTime (*pSrc);
@@ -1046,7 +1045,7 @@ extern "C" {
         }
         return epicsTimeOK;
     }
-    epicsShareFunc double epicsShareAPI epicsTimeDiffInSeconds (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
+    LIBCOM_API double LIBCOMSTD_API epicsTimeDiffInSeconds (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
     {
         try {
             return epicsTime (*pLeft) - epicsTime (*pRight);
@@ -1055,7 +1054,7 @@ extern "C" {
             return - DBL_MAX;
         }
     }
-    epicsShareFunc void epicsShareAPI epicsTimeAddSeconds (epicsTimeStamp *pDest, double seconds)
+    LIBCOM_API void LIBCOMSTD_API epicsTimeAddSeconds (epicsTimeStamp *pDest, double seconds)
     {
         try {
             *pDest = epicsTime (*pDest) + seconds;
@@ -1064,7 +1063,7 @@ extern "C" {
             *pDest = epicsTime ();
         }
     }
-    epicsShareFunc int epicsShareAPI epicsTimeEqual (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeEqual (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
     {
         try {
             return epicsTime (*pLeft) == epicsTime (*pRight);
@@ -1073,7 +1072,7 @@ extern "C" {
             return 0;
         }
     }
-    epicsShareFunc int epicsShareAPI epicsTimeNotEqual (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeNotEqual (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
     {
         try {
             return epicsTime (*pLeft) != epicsTime (*pRight);
@@ -1082,7 +1081,7 @@ extern "C" {
             return 1;
         }
     }
-    epicsShareFunc int epicsShareAPI epicsTimeLessThan (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeLessThan (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
     {
         try {
             return epicsTime (*pLeft) < epicsTime (*pRight);
@@ -1091,7 +1090,7 @@ extern "C" {
             return 0;
         }
     }
-    epicsShareFunc int epicsShareAPI epicsTimeLessThanEqual (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeLessThanEqual (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
     {
         try {
             return epicsTime (*pLeft) <= epicsTime (*pRight);
@@ -1100,7 +1099,7 @@ extern "C" {
             return 0;
         }
     }
-    epicsShareFunc int epicsShareAPI epicsTimeGreaterThan (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeGreaterThan (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
     {
         try {
             return epicsTime (*pLeft) > epicsTime (*pRight);
@@ -1109,7 +1108,7 @@ extern "C" {
             return 0;
         }
     }
-    epicsShareFunc int epicsShareAPI epicsTimeGreaterThanEqual (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
+    LIBCOM_API int LIBCOMSTD_API epicsTimeGreaterThanEqual (const epicsTimeStamp *pLeft, const epicsTimeStamp *pRight)
     {
         try {
             return epicsTime (*pLeft) >= epicsTime (*pRight);
@@ -1118,7 +1117,7 @@ extern "C" {
             return 0;
         }
     }
-    epicsShareFunc size_t epicsShareAPI epicsTimeToStrftime (char *pBuff, size_t bufLength, const char *pFormat, const epicsTimeStamp *pTS)
+    LIBCOM_API size_t LIBCOMSTD_API epicsTimeToStrftime (char *pBuff, size_t bufLength, const char *pFormat, const epicsTimeStamp *pTS)
     {
         try {
             return epicsTime(*pTS).strftime (pBuff, bufLength, pFormat);
@@ -1127,7 +1126,7 @@ extern "C" {
             return 0;
         }
     }
-    epicsShareFunc void epicsShareAPI epicsTimeShow (const epicsTimeStamp *pTS, unsigned interestLevel)
+    LIBCOM_API void LIBCOMSTD_API epicsTimeShow (const epicsTimeStamp *pTS, unsigned interestLevel)
     {
         try {
             epicsTime(*pTS).show (interestLevel);
diff --git a/modules/libcom/src/osi/epicsTime.h b/modules/libcom/src/osi/epicsTime.h
index e9ec71a..c735a14 100644
--- a/modules/libcom/src/osi/epicsTime.h
+++ b/modules/libcom/src/osi/epicsTime.h
@@ -14,7 +14,7 @@
 
 #include <time.h>
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "epicsTypes.h"
 #include "osdTime.h"
 #include "errMdef.h"
@@ -65,7 +65,7 @@ struct time_t_wrapper {
     time_t ts;
 };
 
-class epicsShareClass epicsTimeEvent
+class LIBCOM_API epicsTimeEvent
 {
 public:
     epicsTimeEvent (const int &number);
@@ -74,7 +74,7 @@ private:
     int eventNumber;
 };
 
-class epicsShareClass epicsTime
+class LIBCOM_API epicsTime
 {
 public:
     /* exceptions */
@@ -189,85 +189,85 @@ extern "C" {
 #define epicsTimeEventDeviceTime -2
 
 /* These are implemented in the "generalTime" framework */
-epicsShareFunc int epicsShareAPI epicsTimeGetCurrent ( epicsTimeStamp * pDest );
-epicsShareFunc int epicsShareAPI epicsTimeGetEvent (
+LIBCOM_API int LIBCOMSTD_API epicsTimeGetCurrent ( epicsTimeStamp * pDest );
+LIBCOM_API int LIBCOMSTD_API epicsTimeGetEvent (
     epicsTimeStamp *pDest, int eventNumber);
-epicsShareFunc int epicsTimeGetMonotonic ( epicsTimeStamp * pDest );
+LIBCOM_API int epicsTimeGetMonotonic ( epicsTimeStamp * pDest );
 
 /* These are callable from an Interrupt Service Routine */
-epicsShareFunc int epicsTimeGetCurrentInt(epicsTimeStamp *pDest);
-epicsShareFunc int epicsTimeGetEventInt(epicsTimeStamp *pDest, int eventNumber);
+LIBCOM_API int epicsTimeGetCurrentInt(epicsTimeStamp *pDest);
+LIBCOM_API int epicsTimeGetEventInt(epicsTimeStamp *pDest, int eventNumber);
 
 /* convert to and from ANSI C's "time_t" */
-epicsShareFunc int epicsShareAPI epicsTimeToTime_t (
+LIBCOM_API int LIBCOMSTD_API epicsTimeToTime_t (
     time_t * pDest, const epicsTimeStamp * pSrc );
-epicsShareFunc int epicsShareAPI epicsTimeFromTime_t (
+LIBCOM_API int LIBCOMSTD_API epicsTimeFromTime_t (
     epicsTimeStamp * pDest, time_t src );
 
 /* convert to and from ANSI C's "struct tm" with nano seconds */
-epicsShareFunc int epicsShareAPI epicsTimeToTM (
+LIBCOM_API int LIBCOMSTD_API epicsTimeToTM (
     struct tm * pDest, unsigned long * pNSecDest, const epicsTimeStamp * pSrc );
-epicsShareFunc int epicsShareAPI epicsTimeToGMTM (
+LIBCOM_API int LIBCOMSTD_API epicsTimeToGMTM (
     struct tm * pDest, unsigned long * pNSecDest, const epicsTimeStamp * pSrc );
-epicsShareFunc int epicsShareAPI epicsTimeFromTM (
+LIBCOM_API int LIBCOMSTD_API epicsTimeFromTM (
     epicsTimeStamp * pDest, const struct tm * pSrc, unsigned long nSecSrc );
-epicsShareFunc int epicsShareAPI epicsTimeFromGMTM (
+LIBCOM_API int LIBCOMSTD_API epicsTimeFromGMTM (
     epicsTimeStamp * pDest, const struct tm * pSrc, unsigned long nSecSrc );
 
 /* convert to and from POSIX RT's "struct timespec" */
-epicsShareFunc int epicsShareAPI epicsTimeToTimespec (
+LIBCOM_API int LIBCOMSTD_API epicsTimeToTimespec (
     struct timespec * pDest, const epicsTimeStamp * pSrc );
-epicsShareFunc int epicsShareAPI epicsTimeFromTimespec (
+LIBCOM_API int LIBCOMSTD_API epicsTimeFromTimespec (
     epicsTimeStamp * pDest, const struct timespec * pSrc );
 
 /* convert to and from BSD's "struct timeval" */
-epicsShareFunc int epicsShareAPI epicsTimeToTimeval (
+LIBCOM_API int LIBCOMSTD_API epicsTimeToTimeval (
     struct timeval * pDest, const epicsTimeStamp * pSrc );
-epicsShareFunc int epicsShareAPI epicsTimeFromTimeval (
+LIBCOM_API int LIBCOMSTD_API epicsTimeFromTimeval (
     epicsTimeStamp * pDest, const struct timeval * pSrc );
 
 /*arithmetic operations */
-epicsShareFunc double epicsShareAPI epicsTimeDiffInSeconds (
+LIBCOM_API double LIBCOMSTD_API epicsTimeDiffInSeconds (
     const epicsTimeStamp * pLeft, const epicsTimeStamp * pRight );/* left - right */
-epicsShareFunc void epicsShareAPI epicsTimeAddSeconds (
+LIBCOM_API void LIBCOMSTD_API epicsTimeAddSeconds (
     epicsTimeStamp * pDest, double secondsToAdd ); /* adds seconds to *pDest */
 
 /*comparison operations: returns (0,1) if (false,true) */
-epicsShareFunc int epicsShareAPI epicsTimeEqual (
+LIBCOM_API int LIBCOMSTD_API epicsTimeEqual (
     const epicsTimeStamp * pLeft, const epicsTimeStamp * pRight);
-epicsShareFunc int epicsShareAPI epicsTimeNotEqual (
+LIBCOM_API int LIBCOMSTD_API epicsTimeNotEqual (
     const epicsTimeStamp * pLeft, const epicsTimeStamp * pRight);
-epicsShareFunc int epicsShareAPI epicsTimeLessThan (
+LIBCOM_API int LIBCOMSTD_API epicsTimeLessThan (
     const epicsTimeStamp * pLeft, const epicsTimeStamp * pRight); /*true if left < right */
-epicsShareFunc int epicsShareAPI epicsTimeLessThanEqual (
+LIBCOM_API int LIBCOMSTD_API epicsTimeLessThanEqual (
     const epicsTimeStamp * pLeft, const epicsTimeStamp * pRight); /*true if left <= right) */
-epicsShareFunc int epicsShareAPI epicsTimeGreaterThan (
+LIBCOM_API int LIBCOMSTD_API epicsTimeGreaterThan (
     const epicsTimeStamp * pLeft, const epicsTimeStamp * pRight); /*true if left > right */
-epicsShareFunc int epicsShareAPI epicsTimeGreaterThanEqual (
+LIBCOM_API int LIBCOMSTD_API epicsTimeGreaterThanEqual (
     const epicsTimeStamp * pLeft, const epicsTimeStamp * pRight); /*true if left >= right */
 
 /*convert to ASCII string */
-epicsShareFunc size_t epicsShareAPI epicsTimeToStrftime (
+LIBCOM_API size_t LIBCOMSTD_API epicsTimeToStrftime (
     char * pBuff, size_t bufLength, const char * pFormat, const epicsTimeStamp * pTS );
 
 /* dump current state to standard out */
-epicsShareFunc void epicsShareAPI epicsTimeShow (
+LIBCOM_API void LIBCOMSTD_API epicsTimeShow (
     const epicsTimeStamp *, unsigned interestLevel );
 
 /* OS dependent reentrant versions of the ANSI C interface because */
 /* vxWorks gmtime_r interface does not match POSIX standards */
-epicsShareFunc int epicsShareAPI epicsTime_localtime ( const time_t * clock, struct tm * result );
-epicsShareFunc int epicsShareAPI epicsTime_gmtime ( const time_t * clock, struct tm * result );
+LIBCOM_API int LIBCOMSTD_API epicsTime_localtime ( const time_t * clock, struct tm * result );
+LIBCOM_API int LIBCOMSTD_API epicsTime_gmtime ( const time_t * clock, struct tm * result );
 
 /* Advertised monotonic counter resolution (may not be accurate).
  * Minimum non-zero difference between two calls to epicsMonotonicGet()
  */
-epicsShareFunc epicsUInt64 epicsMonotonicResolution(void);
+LIBCOM_API epicsUInt64 epicsMonotonicResolution(void);
 /* Fetch monotonic counter, return is nano-seconds since an unspecified time */
-epicsShareFunc epicsUInt64 epicsMonotonicGet(void);
+LIBCOM_API epicsUInt64 epicsMonotonicGet(void);
 
 #ifdef EPICS_EXPOSE_LIBCOM_MONOTONIC_PRIVATE
-epicsShareFunc void osdMonotonicInit(void);
+LIBCOM_API void osdMonotonicInit(void);
 #endif
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/osi/generalTimeSup.h b/modules/libcom/src/osi/generalTimeSup.h
index bd6627e..23858d7 100644
--- a/modules/libcom/src/osi/generalTimeSup.h
+++ b/modules/libcom/src/osi/generalTimeSup.h
@@ -12,7 +12,7 @@
 
 #include "epicsTime.h"
 #include "epicsTimer.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #define LAST_RESORT_PRIORITY 999
 
@@ -23,21 +23,21 @@ extern "C" {
 typedef int (*TIMECURRENTFUN)(epicsTimeStamp *pDest);
 typedef int (*TIMEEVENTFUN)(epicsTimeStamp *pDest, int event);
 
-epicsShareFunc int generalTimeRegisterCurrentProvider(const char *name,
+LIBCOM_API int generalTimeRegisterCurrentProvider(const char *name,
     int priority, TIMECURRENTFUN getTime);
-epicsShareFunc int generalTimeRegisterEventProvider(const char *name,
+LIBCOM_API int generalTimeRegisterEventProvider(const char *name,
     int priority, TIMEEVENTFUN getEvent);
 
 /* Original names, for compatibility */
 #define generalTimeCurrentTpRegister generalTimeRegisterCurrentProvider
 #define generalTimeEventTpRegister generalTimeRegisterEventProvider
 
-epicsShareFunc int generalTimeAddIntCurrentProvider(const char *name,
+LIBCOM_API int generalTimeAddIntCurrentProvider(const char *name,
     int priority, TIMECURRENTFUN getTime);
-epicsShareFunc int generalTimeAddIntEventProvider(const char *name,
+LIBCOM_API int generalTimeAddIntEventProvider(const char *name,
     int priority, TIMEEVENTFUN getEvent);
 
-epicsShareFunc int generalTimeGetExceptPriority(epicsTimeStamp *pDest,
+LIBCOM_API int generalTimeGetExceptPriority(epicsTimeStamp *pDest,
     int *pPrio, int ignorePrio);
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/osi/os/Darwin/epicsMath.h b/modules/libcom/src/osi/os/Darwin/epicsMath.h
index d540ba5..330ccb6 100644
--- a/modules/libcom/src/osi/os/Darwin/epicsMath.h
+++ b/modules/libcom/src/osi/os/Darwin/epicsMath.h
@@ -11,7 +11,7 @@
 #define epicsMathh
 
 #include <math.h>
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #define finite(x) isfinite(x)
 
@@ -19,8 +19,8 @@
 extern "C" {
 #endif
 
-epicsShareExtern float epicsNAN;
-epicsShareExtern float epicsINF;
+LIBCOM_API extern float epicsNAN;
+LIBCOM_API extern float epicsINF;
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/os/Darwin/osdEnv.c b/modules/libcom/src/osi/os/Darwin/osdEnv.c
index ea2662d..7165e02 100644
--- a/modules/libcom/src/osi/os/Darwin/osdEnv.c
+++ b/modules/libcom/src/osi/os/Darwin/osdEnv.c
@@ -25,7 +25,6 @@
 #include <crt_externs.h>
 #define environ (*_NSGetEnviron())
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 #include "envDefs.h"
 #include "iocsh.h"
@@ -33,7 +32,7 @@
 /*
  * Set the value of an environment variable
  */
-epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *value)
+LIBCOM_API void LIBCOMSTD_API epicsEnvSet (const char *name, const char *value)
 {
     if (!name) return;
     iocshEnvClear(name);
@@ -44,7 +43,7 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val
  * Unset an environment variable
  */
 
-epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvUnset (const char *name)
 {
     iocshEnvClear(name);
     unsetenv(name);
@@ -53,7 +52,7 @@ epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
 /*
  * Show the value of the specified, or all, environment variables
  */
-epicsShareFunc void epicsShareAPI epicsEnvShow (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvShow (const char *name)
 {
     if (name == NULL) {
         extern char **environ;
diff --git a/modules/libcom/src/osi/os/Darwin/osdFindAddr.c b/modules/libcom/src/osi/os/Darwin/osdFindAddr.c
index b92770a..e3c6750 100644
--- a/modules/libcom/src/osi/os/Darwin/osdFindAddr.c
+++ b/modules/libcom/src/osi/os/Darwin/osdFindAddr.c
@@ -12,7 +12,6 @@
 
 #include <dlfcn.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStackTrace.h"
 #include "epicsStackTracePvt.h"
 
diff --git a/modules/libcom/src/osi/os/Darwin/osdMonotonic.c b/modules/libcom/src/osi/os/Darwin/osdMonotonic.c
index 2f81d00..4110dd0 100644
--- a/modules/libcom/src/osi/os/Darwin/osdMonotonic.c
+++ b/modules/libcom/src/osi/os/Darwin/osdMonotonic.c
@@ -7,7 +7,6 @@
 #include <mach/mach.h>
 #include <mach/mach_time.h>
 
-#define epicsExportSharedSymbols
 #define EPICS_EXPOSE_LIBCOM_MONOTONIC_PRIVATE
 #include "dbDefs.h"
 #include "errlog.h"
diff --git a/modules/libcom/src/osi/os/Darwin/osdSockAddrReuse.cpp b/modules/libcom/src/osi/os/Darwin/osdSockAddrReuse.cpp
index 8695141..1b5e2de 100644
--- a/modules/libcom/src/osi/os/Darwin/osdSockAddrReuse.cpp
+++ b/modules/libcom/src/osi/os/Darwin/osdSockAddrReuse.cpp
@@ -12,11 +12,10 @@
  * Author: Jeff Hill
  */
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 #include "errlog.h"
 
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsSocketEnableAddressReuseDuringTimeWaitState ( SOCKET s )
 {
     int yes = true;
@@ -33,7 +32,7 @@ epicsShareFunc void epicsShareAPI
 /*
  * SO_REUSEPORT is not in POSIX
  */
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsSocketEnableAddressUseForDatagramFanout ( SOCKET s )
 {
     int yes = true;
diff --git a/modules/libcom/src/osi/os/Darwin/osdTime.cpp b/modules/libcom/src/osi/os/Darwin/osdTime.cpp
index 09471a8..88abd00 100644
--- a/modules/libcom/src/osi/os/Darwin/osdTime.cpp
+++ b/modules/libcom/src/osi/os/Darwin/osdTime.cpp
@@ -18,7 +18,6 @@
 #define EPICS_EXPOSE_LIBCOM_MONOTONIC_PRIVATE
 #include "osiSock.h"
 
-#define epicsExportSharedSymbols
 #include "cantProceed.h"
 #include "epicsTime.h"
 #include "generalTimeSup.h"
@@ -65,7 +64,7 @@ int epicsTime_localtime(const time_t *clock, struct tm *result)
         epicsTimeOK : errno;
 }
 
-extern "C" epicsShareFunc void
+extern "C" LIBCOM_API void
 convertDoubleToWakeTime(double timeout, struct timespec *wakeTime)
 {
     mach_timespec_t now;
diff --git a/modules/libcom/src/osi/os/Darwin/osdTime.h b/modules/libcom/src/osi/os/Darwin/osdTime.h
index d0c3614..2fe57fd 100644
--- a/modules/libcom/src/osi/os/Darwin/osdTime.h
+++ b/modules/libcom/src/osi/os/Darwin/osdTime.h
@@ -16,7 +16,7 @@
 extern "C" {
 #endif /* __cplusplus */
 
-epicsShareFunc void convertDoubleToWakeTime(double timeout,
+LIBCOM_API void convertDoubleToWakeTime(double timeout,
     struct timespec *wakeTime);
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/osi/os/Darwin/osdgetexec.c b/modules/libcom/src/osi/os/Darwin/osdgetexec.c
index 4e4961c..0d026a0 100644
--- a/modules/libcom/src/osi/os/Darwin/osdgetexec.c
+++ b/modules/libcom/src/osi/os/Darwin/osdgetexec.c
@@ -4,7 +4,6 @@
 
 #include <mach-o/dyld.h>
 
-#define epicsExportSharedSymbols
 #include <osiFileName.h>
 
 char *epicsGetExecName(void)
diff --git a/modules/libcom/src/osi/os/Linux/osdThread.h b/modules/libcom/src/osi/os/Linux/osdThread.h
index bb1fdcb..25f5020 100644
--- a/modules/libcom/src/osi/os/Linux/osdThread.h
+++ b/modules/libcom/src/osi/os/Linux/osdThread.h
@@ -12,7 +12,7 @@
 #include <pthread.h>
 #include <sys/types.h>
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "ellLib.h"
 #include "epicsEvent.h"
 
@@ -40,8 +40,8 @@ typedef struct epicsThreadOSD {
     char               name[1];     /* actually larger */
 } epicsThreadOSD;
 
-epicsShareFunc pthread_t epicsThreadGetPosixThreadId(epicsThreadId id);
-epicsShareFunc int epicsThreadGetPosixPriority(epicsThreadId id);
+LIBCOM_API pthread_t epicsThreadGetPosixThreadId(epicsThreadId id);
+LIBCOM_API int epicsThreadGetPosixPriority(epicsThreadId id);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/os/Linux/osdThreadExtra.c b/modules/libcom/src/osi/os/Linux/osdThreadExtra.c
index 6423004..9e4575c 100644
--- a/modules/libcom/src/osi/os/Linux/osdThreadExtra.c
+++ b/modules/libcom/src/osi/os/Linux/osdThreadExtra.c
@@ -22,7 +22,6 @@
 #include <sys/types.h>
 #include <sys/prctl.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 #include "ellLib.h"
 #include "epicsEvent.h"
@@ -65,5 +64,5 @@ static void thread_hook(epicsThreadId pthreadInfo)
     pthreadInfo->lwpId = syscall(SYS_gettid);
 }
 
-epicsShareDef EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault = thread_hook;
-epicsShareDef EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain = thread_hook;
+EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault = thread_hook;
+EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain = thread_hook;
diff --git a/modules/libcom/src/osi/os/Linux/osdTime.h b/modules/libcom/src/osi/os/Linux/osdTime.h
index 988f874..6952e34 100644
--- a/modules/libcom/src/osi/os/Linux/osdTime.h
+++ b/modules/libcom/src/osi/os/Linux/osdTime.h
@@ -21,7 +21,7 @@
 extern "C" {
 #endif /* __cplusplus */
 
-epicsShareFunc void epicsShareAPI
+LIBCOM_API void LIBCOMSTD_API
     convertDoubleToWakeTime(double timeout,struct timespec *wakeTime);
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/osi/os/Linux/osdgetexec.c b/modules/libcom/src/osi/os/Linux/osdgetexec.c
index f79906f..f638de2 100644
--- a/modules/libcom/src/osi/os/Linux/osdgetexec.c
+++ b/modules/libcom/src/osi/os/Linux/osdgetexec.c
@@ -4,7 +4,6 @@
 #include <unistd.h>
 #include <limits.h>
 
-#define epicsExportSharedSymbols
 #include <osiFileName.h>
 
 #ifndef PATH_MAX
diff --git a/modules/libcom/src/osi/os/RTEMS/epicsAtomicOSD.h b/modules/libcom/src/osi/os/RTEMS/epicsAtomicOSD.h
index fefd201..5e7b669 100644
--- a/modules/libcom/src/osi/os/RTEMS/epicsAtomicOSD.h
+++ b/modules/libcom/src/osi/os/RTEMS/epicsAtomicOSD.h
@@ -16,7 +16,7 @@
 #ifndef epicsAtomicOSD_h
 #define epicsAtomicOSD_h
 
-#include <shareLib.h>
+#include <libComAPI.h>
 #include "epicsMMIO.h"
 #include "compilerSpecific.h"
 #include "epicsInterrupt.h"
diff --git a/modules/libcom/src/osi/os/RTEMS/epicsMath.h b/modules/libcom/src/osi/os/RTEMS/epicsMath.h
index 83115f0..b589792 100644
--- a/modules/libcom/src/osi/os/RTEMS/epicsMath.h
+++ b/modules/libcom/src/osi/os/RTEMS/epicsMath.h
@@ -12,14 +12,14 @@
 
 #include <math.h>
 #include <ieeefp.h>
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-epicsShareExtern float epicsNAN;
-epicsShareExtern float epicsINF;
+LIBCOM_API extern float epicsNAN;
+LIBCOM_API extern float epicsINF;
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/os/RTEMS/osdEnv.c b/modules/libcom/src/osi/os/RTEMS/osdEnv.c
index c356a0a..1901d9e 100644
--- a/modules/libcom/src/osi/os/RTEMS/osdEnv.c
+++ b/modules/libcom/src/osi/os/RTEMS/osdEnv.c
@@ -15,7 +15,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 #include "envDefs.h"
 #include "osiUnistd.h"
@@ -24,7 +23,7 @@
 /*
  * Set the value of an environment variable
  */
-epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *value)
+LIBCOM_API void LIBCOMSTD_API epicsEnvSet (const char *name, const char *value)
 {
     iocshEnvClear(name);
     setenv(name, value, 1);
@@ -34,7 +33,7 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val
  * Unset an environment variable
  */
 
-epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvUnset (const char *name)
 {
     iocshEnvClear(name);
     unsetenv(name);
@@ -43,7 +42,7 @@ epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
 /*
  * Show the value of the specified, or all, environment variables
  */
-epicsShareFunc void epicsShareAPI epicsEnvShow (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvShow (const char *name)
 {
     if (name == NULL) {
         extern char **environ;
diff --git a/modules/libcom/src/osi/os/RTEMS/osdFindSymbol.c b/modules/libcom/src/osi/os/RTEMS/osdFindSymbol.c
index 9e947f9..98e8128 100644
--- a/modules/libcom/src/osi/os/RTEMS/osdFindSymbol.c
+++ b/modules/libcom/src/osi/os/RTEMS/osdFindSymbol.c
@@ -12,20 +12,19 @@
  * as the code must build for non-GESYS systems as well.
  */
 
-#define epicsExportSharedSymbols
 #include "epicsFindSymbol.h"
 
-epicsShareFunc void * epicsLoadLibrary(const char *name)
+LIBCOM_API void * epicsLoadLibrary(const char *name)
 {
     return 0;
 }
 
-epicsShareFunc const char *epicsLoadError(void)
+LIBCOM_API const char *epicsLoadError(void)
 {
     return "epicsLoadLibrary not implemented";
 }
 
-epicsShareFunc void * epicsShareAPI epicsFindSymbol(const char *name)
+LIBCOM_API void * LIBCOMSTD_API epicsFindSymbol(const char *name)
 {
     return 0;
 }
diff --git a/modules/libcom/src/osi/os/RTEMS/osdMessageQueue.c b/modules/libcom/src/osi/os/RTEMS/osdMessageQueue.c
index a566de6..019cfe2 100644
--- a/modules/libcom/src/osi/os/RTEMS/osdMessageQueue.c
+++ b/modules/libcom/src/osi/os/RTEMS/osdMessageQueue.c
@@ -19,7 +19,6 @@
  */
 #define __RTEMS_VIOLATE_KERNEL_VISIBILITY__ 1
 
-#define epicsExportSharedSymbols
 #include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -29,7 +28,7 @@
 #include "epicsMessageQueue.h"
 #include "errlog.h"
 
-epicsShareFunc epicsMessageQueueId epicsShareAPI
+LIBCOM_API epicsMessageQueueId LIBCOMSTD_API
 epicsMessageQueueCreate(unsigned int capacity, unsigned int maximumMessageSize)
 {
     rtems_status_code sc;
@@ -120,7 +119,7 @@ static rtems_status_code rtems_message_queue_send_timeout(
   return RTEMS_INTERNAL_ERROR;   /* unreached - only to remove warnings */
 }
 
-epicsShareFunc int epicsShareAPI epicsMessageQueueSend(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueSend(
     epicsMessageQueueId id,
     void *message,
     unsigned int messageSize)
@@ -131,7 +130,7 @@ epicsShareFunc int epicsShareAPI epicsMessageQueueSend(
         return -1;
 }
 
-epicsShareFunc int epicsShareAPI epicsMessageQueueSendWithTimeout(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueSendWithTimeout(
     epicsMessageQueueId id,
     void *message,
     unsigned int messageSize,
@@ -183,7 +182,7 @@ static int receiveMessage(
     return rsize;
 }
 
-epicsShareFunc int epicsShareAPI epicsMessageQueueTryReceive(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueTryReceive(
     epicsMessageQueueId id,
     void *message,
     unsigned int size)
@@ -191,7 +190,7 @@ epicsShareFunc int epicsShareAPI epicsMessageQueueTryReceive(
     return receiveMessage(id, message, size, RTEMS_NO_WAIT, 0);
 }
 
-epicsShareFunc int epicsShareAPI epicsMessageQueueReceive(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueReceive(
     epicsMessageQueueId id,
     void *message,
     unsigned int size)
@@ -199,7 +198,7 @@ epicsShareFunc int epicsShareAPI epicsMessageQueueReceive(
     return receiveMessage(id, message, size, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
 }
 
-epicsShareFunc int epicsShareAPI epicsMessageQueueReceiveWithTimeout(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueReceiveWithTimeout(
     epicsMessageQueueId id,
     void *message,
     unsigned int size,
@@ -225,7 +224,7 @@ epicsShareFunc int epicsShareAPI epicsMessageQueueReceiveWithTimeout(
     return receiveMessage(id, message, size, wait, delay);
 }
 
-epicsShareFunc int epicsShareAPI epicsMessageQueuePending(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueuePending(
             epicsMessageQueueId id)
 {
     uint32_t count;
@@ -241,7 +240,7 @@ epicsShareFunc int epicsShareAPI epicsMessageQueuePending(
     return count;
 }
 
-epicsShareFunc void epicsShareAPI epicsMessageQueueShow(
+LIBCOM_API void LIBCOMSTD_API epicsMessageQueueShow(
             epicsMessageQueueId id,
                 int level)
 {
diff --git a/modules/libcom/src/osi/os/RTEMS/osdMutex.c b/modules/libcom/src/osi/os/RTEMS/osdMutex.c
index 96fde6e..da76c5e 100644
--- a/modules/libcom/src/osi/os/RTEMS/osdMutex.c
+++ b/modules/libcom/src/osi/os/RTEMS/osdMutex.c
@@ -185,7 +185,7 @@ epicsMutexLockStatus epicsMutexOsdTryLock(struct epicsMutexOSD * id)
 #endif
 }
 
-epicsShareFunc void epicsMutexOsdShow(struct epicsMutexOSD * id,unsigned int level)
+LIBCOM_API void epicsMutexOsdShow(struct epicsMutexOSD * id,unsigned int level)
 {
 #ifdef RTEMS_FAST_MUTEX
     Semaphore_Control *the_semaphore = (Semaphore_Control *)id;
diff --git a/modules/libcom/src/osi/os/RTEMS/osdPoolStatus.c b/modules/libcom/src/osi/os/RTEMS/osdPoolStatus.c
index b2f4011..bf3420c 100644
--- a/modules/libcom/src/osi/os/RTEMS/osdPoolStatus.c
+++ b/modules/libcom/src/osi/os/RTEMS/osdPoolStatus.c
@@ -9,13 +9,12 @@
 \*************************************************************************/
 #include <rtems/malloc.h>
 
-#define epicsExportSharedSymbols
 #include "osiPoolStatus.h"
 
 /*
  * osiSufficentSpaceInPool ()
  */
-epicsShareFunc int epicsShareAPI osiSufficentSpaceInPool ( size_t contiguousBlockSize )
+LIBCOM_API int LIBCOMSTD_API osiSufficentSpaceInPool ( size_t contiguousBlockSize )
 {
     rtems_malloc_statistics_t s;
     unsigned long n;
diff --git a/modules/libcom/src/osi/os/RTEMS/osdProcess.c b/modules/libcom/src/osi/os/RTEMS/osdProcess.c
index 2768dbb..49bdfa4 100644
--- a/modules/libcom/src/osi/os/RTEMS/osdProcess.c
+++ b/modules/libcom/src/osi/os/RTEMS/osdProcess.c
@@ -18,10 +18,9 @@
 #include <limits.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "osiProcess.h"
 
-epicsShareFunc osiGetUserNameReturn epicsShareAPI osiGetUserName (char *pBuf, unsigned bufSizeIn)
+LIBCOM_API osiGetUserNameReturn LIBCOMSTD_API osiGetUserName (char *pBuf, unsigned bufSizeIn)
 {
     const char *pName = "rtems";
     unsigned uiLength;
@@ -43,7 +42,7 @@ epicsShareFunc osiGetUserNameReturn epicsShareAPI osiGetUserName (char *pBuf, un
     return osiGetUserNameSuccess;
 }
 
-epicsShareFunc osiSpawnDetachedProcessReturn epicsShareAPI osiSpawnDetachedProcess
+LIBCOM_API osiSpawnDetachedProcessReturn LIBCOMSTD_API osiSpawnDetachedProcess
     (const char *pProcessName, const char *pBaseExecutableName)
 {
     return osiSpawnDetachedProcessNoSupport;
diff --git a/modules/libcom/src/osi/os/RTEMS/osdSignal.cpp b/modules/libcom/src/osi/os/RTEMS/osdSignal.cpp
index 08dfa02..c4de5c2 100644
--- a/modules/libcom/src/osi/os/RTEMS/osdSignal.cpp
+++ b/modules/libcom/src/osi/os/RTEMS/osdSignal.cpp
@@ -8,14 +8,13 @@
  * in file LICENSE that is included with this distribution. 
 \*************************************************************************/
 
-#define epicsExportSharedSymbols
 #include "epicsSignal.h"
 
 /*
  * All NOOPs if the os isnt POSIX
  */
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigHupIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigAlarmIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * /* threadId */ ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigHupIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigPipeIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigAlarmIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * /* threadId */ ) {}
 
diff --git a/modules/libcom/src/osi/os/RTEMS/osdThread.c b/modules/libcom/src/osi/os/RTEMS/osdThread.c
index bdcd8c1..0112291 100644
--- a/modules/libcom/src/osi/os/RTEMS/osdThread.c
+++ b/modules/libcom/src/osi/os/RTEMS/osdThread.c
@@ -37,8 +37,8 @@
 #include "epicsExit.h"
 #include "epicsAtomic.h"
 
-epicsShareFunc void osdThreadHooksRun(epicsThreadId id);
-epicsShareFunc void osdThreadHooksRunMain(epicsThreadId id);
+LIBCOM_API void osdThreadHooksRun(epicsThreadId id);
+LIBCOM_API void osdThreadHooksRunMain(epicsThreadId id);
 
 /*
  * Per-task variables
@@ -107,7 +107,7 @@ int epicsThreadGetOssPriorityValue(unsigned int osiPriority)
 /*
  * epicsThreadLowestPriorityLevelAbove ()
  */
-epicsShareFunc epicsThreadBooleanStatus epicsThreadLowestPriorityLevelAbove 
+LIBCOM_API epicsThreadBooleanStatus epicsThreadLowestPriorityLevelAbove 
             (unsigned int priority, unsigned *pPriorityJustAbove)
 {
     unsigned newPriority = priority + 1;
@@ -123,7 +123,7 @@ epicsShareFunc epicsThreadBooleanStatus epicsThreadLowestPriorityLevelAbove
 /*
  * epicsThreadHighestPriorityLevelBelow ()
  */
-epicsShareFunc epicsThreadBooleanStatus epicsThreadHighestPriorityLevelBelow 
+LIBCOM_API epicsThreadBooleanStatus epicsThreadHighestPriorityLevelBelow 
             (unsigned int priority, unsigned *pPriorityJustBelow)
 {
     unsigned newPriority = priority - 1;
@@ -841,7 +841,7 @@ double epicsThreadSleepQuantum ( void )
     return 1.0 / rtemsTicksPerSecond_double;
 }
 
-epicsShareFunc int epicsThreadGetCPUs(void)
+LIBCOM_API int epicsThreadGetCPUs(void)
 {
 #if defined(RTEMS_SMP)
     return rtems_smp_get_number_of_processors();
diff --git a/modules/libcom/src/osi/os/RTEMS/osdThreadExtra.c b/modules/libcom/src/osi/os/RTEMS/osdThreadExtra.c
index 0a7c7ae..f456280 100644
--- a/modules/libcom/src/osi/os/RTEMS/osdThreadExtra.c
+++ b/modules/libcom/src/osi/os/RTEMS/osdThreadExtra.c
@@ -9,8 +9,7 @@
 
 /* Null default thread hooks for all platforms that do not do anything special */
 
-#define epicsExportSharedSymbols
 #include "epicsThread.h"
 
-epicsShareDef EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault;
-epicsShareDef EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain;
+EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault;
+EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain;
diff --git a/modules/libcom/src/osi/os/WIN32/epicsGetopt.c b/modules/libcom/src/osi/os/WIN32/epicsGetopt.c
index 1ea064e..a364c25 100644
--- a/modules/libcom/src/osi/os/WIN32/epicsGetopt.c
+++ b/modules/libcom/src/osi/os/WIN32/epicsGetopt.c
@@ -41,18 +41,17 @@ static char sccsid[] = "@(#)getopt.c	8.3 (Berkeley) 4/27/95";
 #include <stdlib.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include <epicsGetopt.h>
 
 #define _getprogname() nargv[0]
 
-epicsShareDef
+
 int	opterr = 1,		/* if error message should be printed */
 	optind = 1,		/* index into parent argv vector */
 	optopt;			/* character checked for validity */
 int	optreset;		/* reset getopt */
 
-epicsShareDef 
+
 char	*optarg;		/* argument associated with option */
 
 #define	BADCH	(int)'?'
diff --git a/modules/libcom/src/osi/os/WIN32/epicsGetopt.h b/modules/libcom/src/osi/os/WIN32/epicsGetopt.h
index f920410..780734e 100644
--- a/modules/libcom/src/osi/os/WIN32/epicsGetopt.h
+++ b/modules/libcom/src/osi/os/WIN32/epicsGetopt.h
@@ -18,17 +18,17 @@
 
 #else /* _MINGW */
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-epicsShareFunc int getopt(int argc, char * const argv[], const char *optstring);
+LIBCOM_API int getopt(int argc, char * const argv[], const char *optstring);
 
-epicsShareExtern char *optarg;
+LIBCOM_API extern char *optarg;
 
-epicsShareExtern int optind, opterr, optopt;
+LIBCOM_API extern int optind, opterr, optopt;
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/os/WIN32/epicsMath.h b/modules/libcom/src/osi/os/WIN32/epicsMath.h
index 33eb9dd..65e7c7b 100644
--- a/modules/libcom/src/osi/os/WIN32/epicsMath.h
+++ b/modules/libcom/src/osi/os/WIN32/epicsMath.h
@@ -12,7 +12,7 @@
 
 #include <math.h>
 #include <float.h>
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #ifndef finite
 #define finite(D) _finite(D)
@@ -30,8 +30,8 @@
 extern "C" {
 #endif
 
-epicsShareExtern float epicsNAN;
-epicsShareExtern float epicsINF;
+LIBCOM_API extern float epicsNAN;
+LIBCOM_API extern float epicsINF;
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/os/WIN32/epicsSocketConvertErrnoToString.cpp b/modules/libcom/src/osi/os/WIN32/epicsSocketConvertErrnoToString.cpp
index 3db87ac..2621ce2 100644
--- a/modules/libcom/src/osi/os/WIN32/epicsSocketConvertErrnoToString.cpp
+++ b/modules/libcom/src/osi/os/WIN32/epicsSocketConvertErrnoToString.cpp
@@ -9,7 +9,6 @@
 
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 #include "epicsStdio.h"
 
diff --git a/modules/libcom/src/osi/os/WIN32/epicsTempFile.cpp b/modules/libcom/src/osi/os/WIN32/epicsTempFile.cpp
index 2283a85..3ff0672 100644
--- a/modules/libcom/src/osi/os/WIN32/epicsTempFile.cpp
+++ b/modules/libcom/src/osi/os/WIN32/epicsTempFile.cpp
@@ -18,7 +18,6 @@
 #include <fcntl.h>
 #include <sys/stat.h>
 
-#define epicsExportSharedSymbols
 #include "epicsTempFile.h"
 
 //
@@ -28,7 +27,7 @@
 // TMP environment varianble
 //
 extern "C"
-epicsShareFunc FILE * epicsShareAPI epicsTempFile ()
+LIBCOM_API FILE * LIBCOMSTD_API epicsTempFile ()
 {
     char * pName = _tempnam ( "c:\\tmp", "epics" );
     if( ! pName ) {
diff --git a/modules/libcom/src/osi/os/WIN32/osdBackTrace.cpp b/modules/libcom/src/osi/os/WIN32/osdBackTrace.cpp
index 8f5896a..e143ebd 100644
--- a/modules/libcom/src/osi/os/WIN32/osdBackTrace.cpp
+++ b/modules/libcom/src/osi/os/WIN32/osdBackTrace.cpp
@@ -9,7 +9,6 @@
 
 #include <windows.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStackTracePvt.h"
 
 int epicsBackTrace(void **buf, int buf_sz)
diff --git a/modules/libcom/src/osi/os/WIN32/osdEnv.c b/modules/libcom/src/osi/os/WIN32/osdEnv.c
index 4c5587b..e6857ca 100644
--- a/modules/libcom/src/osi/os/WIN32/osdEnv.c
+++ b/modules/libcom/src/osi/os/WIN32/osdEnv.c
@@ -18,7 +18,6 @@
 #include <ctype.h>
 #include <errno.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 #include "errlog.h"
 #include "cantProceed.h"
@@ -32,7 +31,7 @@
  * Leaks memory, but the assumption is that this routine won't be
  * called often enough for the leak to be a problem.
  */
-epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *value)
+LIBCOM_API void LIBCOMSTD_API epicsEnvSet (const char *name, const char *value)
 {
     char *cp;
 
@@ -60,7 +59,7 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val
  * Using putenv with a an existing name plus "=" (without value) deletes
  */
 
-epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvUnset (const char *name)
 {
     iocshEnvClear(name);
     if (getenv(name) != NULL)
@@ -70,7 +69,7 @@ epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
 /*
  * Show the value of the specified, or all, environment variables
  */
-epicsShareFunc void epicsShareAPI epicsEnvShow (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvShow (const char *name)
 {
     if (name == NULL) {
         extern char **environ;
diff --git a/modules/libcom/src/osi/os/WIN32/osdEvent.c b/modules/libcom/src/osi/os/WIN32/osdEvent.c
index 314138b..1339d8a 100644
--- a/modules/libcom/src/osi/os/WIN32/osdEvent.c
+++ b/modules/libcom/src/osi/os/WIN32/osdEvent.c
@@ -22,8 +22,7 @@
 #define STRICT
 #include <windows.h>
 
-#define epicsExportSharedSymbols
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "epicsEvent.h"
 
 typedef struct epicsEventOSD {
@@ -33,7 +32,7 @@ typedef struct epicsEventOSD {
 /*
  * epicsEventCreate ()
  */
-epicsShareFunc epicsEventId epicsEventCreate (
+LIBCOM_API epicsEventId epicsEventCreate (
     epicsEventInitialState initialState ) 
 {
     epicsEventOSD *pSem;
@@ -53,7 +52,7 @@ epicsShareFunc epicsEventId epicsEventCreate (
 /*
  * epicsEventDestroy ()
  */
-epicsShareFunc void epicsEventDestroy ( epicsEventId pSem ) 
+LIBCOM_API void epicsEventDestroy ( epicsEventId pSem ) 
 {
     CloseHandle ( pSem->handle );
     free ( pSem );
@@ -62,7 +61,7 @@ epicsShareFunc void epicsEventDestroy ( epicsEventId pSem )
 /*
  * epicsEventTrigger ()
  */
-epicsShareFunc epicsEventStatus epicsEventTrigger ( epicsEventId pSem ) 
+LIBCOM_API epicsEventStatus epicsEventTrigger ( epicsEventId pSem ) 
 {
     BOOL status;
     status = SetEvent ( pSem->handle );
@@ -72,7 +71,7 @@ epicsShareFunc epicsEventStatus epicsEventTrigger ( epicsEventId pSem )
 /*
  * epicsEventWait ()
  */
-epicsShareFunc epicsEventStatus epicsEventWait ( epicsEventId pSem ) 
+LIBCOM_API epicsEventStatus epicsEventWait ( epicsEventId pSem ) 
 { 
     DWORD status;
     status = WaitForSingleObject (pSem->handle, INFINITE);
@@ -87,7 +86,7 @@ epicsShareFunc epicsEventStatus epicsEventWait ( epicsEventId pSem )
 /*
  * epicsEventWaitWithTimeout ()
  */
-epicsShareFunc epicsEventStatus epicsEventWaitWithTimeout (
+LIBCOM_API epicsEventStatus epicsEventWaitWithTimeout (
     epicsEventId pSem, double timeOut )
 { 
     static const unsigned mSecPerSec = 1000;
@@ -121,7 +120,7 @@ epicsShareFunc epicsEventStatus epicsEventWaitWithTimeout (
 /*
  * epicsEventTryWait ()
  */
-epicsShareFunc epicsEventStatus epicsEventTryWait ( epicsEventId pSem ) 
+LIBCOM_API epicsEventStatus epicsEventTryWait ( epicsEventId pSem ) 
 { 
     DWORD status;
 
@@ -140,6 +139,6 @@ epicsShareFunc epicsEventStatus epicsEventTryWait ( epicsEventId pSem )
 /*
  * epicsEventShow ()
  */
-epicsShareFunc void epicsEventShow ( epicsEventId id, unsigned level ) 
+LIBCOM_API void epicsEventShow ( epicsEventId id, unsigned level ) 
 { 
 }
diff --git a/modules/libcom/src/osi/os/WIN32/osdFindAddr.c b/modules/libcom/src/osi/os/WIN32/osdFindAddr.c
index 5172e26..d9aa090 100644
--- a/modules/libcom/src/osi/os/WIN32/osdFindAddr.c
+++ b/modules/libcom/src/osi/os/WIN32/osdFindAddr.c
@@ -6,7 +6,6 @@
 
 #include <windows.h>
 #include <dbghelp.h>
-#define epicsExportSharedSymbols
 #include "epicsStackTracePvt.h"
 #include "epicsStackTrace.h"
 #include "epicsString.h"
diff --git a/modules/libcom/src/osi/os/WIN32/osdFindSymbol.c b/modules/libcom/src/osi/os/WIN32/osdFindSymbol.c
index 6de3c42..a04cd30 100644
--- a/modules/libcom/src/osi/os/WIN32/osdFindSymbol.c
+++ b/modules/libcom/src/osi/os/WIN32/osdFindSymbol.c
@@ -8,12 +8,11 @@
 
 #include <windows.h>
 
-#define epicsExportSharedSymbols
 #include "epicsFindSymbol.h"
 
 static int epicsLoadErrorCode = 0;
 
-epicsShareFunc void * epicsLoadLibrary(const char *name)
+LIBCOM_API void * epicsLoadLibrary(const char *name)
 {
     HMODULE lib;
 
@@ -26,7 +25,7 @@ epicsShareFunc void * epicsLoadLibrary(const char *name)
     return lib;
 }
 
-epicsShareFunc const char *epicsLoadError(void)
+LIBCOM_API const char *epicsLoadError(void)
 {
     static char buffer[100];
 
@@ -40,7 +39,7 @@ epicsShareFunc const char *epicsLoadError(void)
     return buffer;
 }
 
-epicsShareFunc void * epicsShareAPI epicsFindSymbol(const char *name)
+LIBCOM_API void * LIBCOMSTD_API epicsFindSymbol(const char *name)
 {
     return GetProcAddress(0, name);
 }
diff --git a/modules/libcom/src/osi/os/WIN32/osdMonotonic.c b/modules/libcom/src/osi/os/WIN32/osdMonotonic.c
index e7da25d..b6e4d97 100644
--- a/modules/libcom/src/osi/os/WIN32/osdMonotonic.c
+++ b/modules/libcom/src/osi/os/WIN32/osdMonotonic.c
@@ -6,7 +6,6 @@
 
 #include <windows.h>
 
-#define epicsExportSharedSymbols
 #define EPICS_EXPOSE_LIBCOM_MONOTONIC_PRIVATE
 #include "dbDefs.h"
 #include "errlog.h"
diff --git a/modules/libcom/src/osi/os/WIN32/osdMutex.c b/modules/libcom/src/osi/os/WIN32/osdMutex.c
index 63a51ef..6bcf1e6 100644
--- a/modules/libcom/src/osi/os/WIN32/osdMutex.c
+++ b/modules/libcom/src/osi/os/WIN32/osdMutex.c
@@ -42,8 +42,7 @@
 #endif
 #include <windows.h>
 
-#define epicsExportSharedSymbols
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "epicsMutex.h"
 #include "epicsAssert.h"
 #include "epicsStdio.h"
diff --git a/modules/libcom/src/osi/os/WIN32/osdNetIntf.c b/modules/libcom/src/osi/os/WIN32/osdNetIntf.c
index db445d4..e187b4b 100644
--- a/modules/libcom/src/osi/os/WIN32/osdNetIntf.c
+++ b/modules/libcom/src/osi/os/WIN32/osdNetIntf.c
@@ -34,7 +34,6 @@
 /*
  * EPICS
  */
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 #include "errlog.h"
 #include "epicsThread.h"
@@ -122,7 +121,7 @@ fail:
     free ( pIfinfoList );
 }
 
-epicsShareFunc osiSockAddr epicsShareAPI osiLocalAddr (SOCKET socket)
+LIBCOM_API osiSockAddr LIBCOMSTD_API osiLocalAddr (SOCKET socket)
 {
     epicsThreadOnce(&osiLocalAddrId, osiLocalAddrOnce, (void*)&socket);
     return osiLocalAddrResult;
@@ -131,7 +130,7 @@ epicsShareFunc osiSockAddr epicsShareAPI osiLocalAddr (SOCKET socket)
 /*
  * osiSockDiscoverBroadcastAddresses ()
  */
-epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
+LIBCOM_API void LIBCOMSTD_API osiSockDiscoverBroadcastAddresses
      (ELLLIST *pList, SOCKET socket, const osiSockAddr *pMatchAddr)
 {
     int                 status;
diff --git a/modules/libcom/src/osi/os/WIN32/osdPoolStatus.c b/modules/libcom/src/osi/os/WIN32/osdPoolStatus.c
index bb764b2..f0b2679 100644
--- a/modules/libcom/src/osi/os/WIN32/osdPoolStatus.c
+++ b/modules/libcom/src/osi/os/WIN32/osdPoolStatus.c
@@ -8,7 +8,6 @@
 * in file LICENSE that is included with this distribution. 
 \*************************************************************************/
 
-#define epicsExportSharedSymbols
 #include "osiPoolStatus.h"
 
 /*
@@ -17,7 +16,7 @@
  * @@@@@ not implemented @@@@@
  *
  */
-epicsShareFunc int epicsShareAPI osiSufficentSpaceInPool ( size_t contiguousBlockSize )
+LIBCOM_API int LIBCOMSTD_API osiSufficentSpaceInPool ( size_t contiguousBlockSize )
 {
     return 1;
 }
diff --git a/modules/libcom/src/osi/os/WIN32/osdProcess.c b/modules/libcom/src/osi/os/WIN32/osdProcess.c
index fbe68ba..d6d7478 100644
--- a/modules/libcom/src/osi/os/WIN32/osdProcess.c
+++ b/modules/libcom/src/osi/os/WIN32/osdProcess.c
@@ -24,10 +24,9 @@
 #define STRICT
 #include <windows.h>
 
-#define epicsExportSharedSymbols
 #include "osiProcess.h"
 
-epicsShareFunc osiGetUserNameReturn epicsShareAPI osiGetUserName (char *pBuf, unsigned bufSizeIn)
+LIBCOM_API osiGetUserNameReturn LIBCOMSTD_API osiGetUserName (char *pBuf, unsigned bufSizeIn)
 {
     DWORD bufsize;
 
@@ -48,7 +47,7 @@ epicsShareFunc osiGetUserNameReturn epicsShareAPI osiGetUserName (char *pBuf, un
     return osiGetUserNameSuccess;
 }
 
-epicsShareFunc osiSpawnDetachedProcessReturn epicsShareAPI osiSpawnDetachedProcess 
+LIBCOM_API osiSpawnDetachedProcessReturn LIBCOMSTD_API osiSpawnDetachedProcess 
     ( const char *pProcessName, const char *pBaseExecutableName )
 {
 	BOOL status;
diff --git a/modules/libcom/src/osi/os/WIN32/osdSignal.cpp b/modules/libcom/src/osi/os/WIN32/osdSignal.cpp
index 5f79927..d052f35 100644
--- a/modules/libcom/src/osi/os/WIN32/osdSignal.cpp
+++ b/modules/libcom/src/osi/os/WIN32/osdSignal.cpp
@@ -8,14 +8,13 @@
  * in file LICENSE that is included with this distribution. 
 \*************************************************************************/
 
-#define epicsExportSharedSymbols
 #include "epicsSignal.h"
 
 /*
  * NOOP
  */
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigHupIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigAlarmIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * /* threadid */ ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigHupIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigPipeIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigAlarmIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * /* threadid */ ) {}
 
diff --git a/modules/libcom/src/osi/os/WIN32/osdSock.c b/modules/libcom/src/osi/os/WIN32/osdSock.c
index b8c8363..e2a9636 100644
--- a/modules/libcom/src/osi/os/WIN32/osdSock.c
+++ b/modules/libcom/src/osi/os/WIN32/osdSock.c
@@ -31,7 +31,6 @@
 #define STRICT
 #include <winsock2.h>
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 #include "errlog.h"
 #include "epicsVersion.h"
@@ -39,7 +38,7 @@
 static unsigned nAttached = 0;
 static WSADATA WsaData; /* version of winsock */
 
-epicsShareFunc unsigned epicsShareAPI wsaMajorVersion ()
+LIBCOM_API unsigned LIBCOMSTD_API wsaMajorVersion ()
 {
 	return (unsigned) LOBYTE( WsaData.wVersion );
 }
@@ -47,7 +46,7 @@ epicsShareFunc unsigned epicsShareAPI wsaMajorVersion ()
 /*
  * osiSockAttach()
  */
-epicsShareFunc int epicsShareAPI osiSockAttach()
+LIBCOM_API int LIBCOMSTD_API osiSockAttach()
 {
 	int status;
 
@@ -101,7 +100,7 @@ epicsShareFunc int epicsShareAPI osiSockAttach()
 /*
  * osiSockRelease()
  */
-epicsShareFunc void epicsShareAPI osiSockRelease()
+LIBCOM_API void LIBCOMSTD_API osiSockRelease()
 {
 	if (nAttached) {
 		if (--nAttached==0u) {
@@ -114,19 +113,19 @@ epicsShareFunc void epicsShareAPI osiSockRelease()
 	}
 }
 
-epicsShareFunc SOCKET epicsShareAPI epicsSocketCreate ( 
+LIBCOM_API SOCKET LIBCOMSTD_API epicsSocketCreate ( 
     int domain, int type, int protocol )
 {
     return socket ( domain, type, protocol );
 }
 
-epicsShareFunc int epicsShareAPI epicsSocketAccept ( 
+LIBCOM_API int LIBCOMSTD_API epicsSocketAccept ( 
     int sock, struct sockaddr * pAddr, osiSocklen_t * addrlen )
 {
     return accept ( sock, pAddr, addrlen );
 }
 
-epicsShareFunc void epicsShareAPI epicsSocketDestroy ( SOCKET s )
+LIBCOM_API void LIBCOMSTD_API epicsSocketDestroy ( SOCKET s )
 {
     int status = closesocket ( s );
     if ( status < 0 ) {
@@ -141,7 +140,7 @@ epicsShareFunc void epicsShareAPI epicsSocketDestroy ( SOCKET s )
 /*
  * ipAddrToHostName
  */
-epicsShareFunc unsigned epicsShareAPI ipAddrToHostName 
+LIBCOM_API unsigned LIBCOMSTD_API ipAddrToHostName 
             (const struct in_addr *pAddr, char *pBuf, unsigned bufSize)
 {
 	struct hostent	*ent;
@@ -162,7 +161,7 @@ epicsShareFunc unsigned epicsShareAPI ipAddrToHostName
 /*
  * hostToIPAddr ()
  */
-epicsShareFunc int epicsShareAPI hostToIPAddr 
+LIBCOM_API int LIBCOMSTD_API hostToIPAddr 
 				(const char *pHostName, struct in_addr *pIPA)
 {
 	struct hostent *phe;
diff --git a/modules/libcom/src/osi/os/WIN32/osdSock.h b/modules/libcom/src/osi/os/WIN32/osdSock.h
index c1bc1d9..0a031dc 100644
--- a/modules/libcom/src/osi/os/WIN32/osdSock.h
+++ b/modules/libcom/src/osi/os/WIN32/osdSock.h
@@ -75,6 +75,6 @@ typedef DWORD osiSockOptMcastTTL_t;
  */
 #define FD_IN_FDSET(FD) (1)
 
-epicsShareFunc unsigned epicsShareAPI wsaMajorVersion ();
+LIBCOM_API unsigned LIBCOMSTD_API wsaMajorVersion ();
 
 #endif /*osdSockH*/
diff --git a/modules/libcom/src/osi/os/WIN32/osdSockAddrReuse.cpp b/modules/libcom/src/osi/os/WIN32/osdSockAddrReuse.cpp
index d441d75..68195be 100644
--- a/modules/libcom/src/osi/os/WIN32/osdSockAddrReuse.cpp
+++ b/modules/libcom/src/osi/os/WIN32/osdSockAddrReuse.cpp
@@ -13,7 +13,6 @@
  * Author: Jeff Hill
  */
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 #include "errlog.h"
 
@@ -24,12 +23,12 @@
  * Also, servers are always enabled to reuse a port immediately after 
  * they exit ( even if SO_REUSEADDR isnt set ).
  */
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsSocketEnableAddressReuseDuringTimeWaitState ( SOCKET s )
 {
 }
 
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsSocketEnableAddressUseForDatagramFanout ( SOCKET s )
 {
     int yes = true;
diff --git a/modules/libcom/src/osi/os/WIN32/osdSockUnsentCount.c b/modules/libcom/src/osi/os/WIN32/osdSockUnsentCount.c
index 3f4ab3e..528dbe3 100644
--- a/modules/libcom/src/osi/os/WIN32/osdSockUnsentCount.c
+++ b/modules/libcom/src/osi/os/WIN32/osdSockUnsentCount.c
@@ -3,7 +3,6 @@
 * in file LICENSE that is included with this distribution.
 \*************************************************************************/
 
-#define epicsExportSharedSymbols
 #define EPICS_PRIVATE_API
 #include "osiSock.h"
 #include <mstcpip.h>
diff --git a/modules/libcom/src/osi/os/WIN32/osdStdio.c b/modules/libcom/src/osi/os/WIN32/osdStdio.c
index 8a2d58e..681dd2c 100644
--- a/modules/libcom/src/osi/os/WIN32/osdStdio.c
+++ b/modules/libcom/src/osi/os/WIN32/osdStdio.c
@@ -16,10 +16,9 @@
 _CRTIMP int __cdecl __MINGW_NOTHROW _vscprintf (const char*, va_list);
 #endif
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 
-int epicsShareAPI epicsVsnprintf(char *str, size_t len,
+int LIBCOMSTD_API epicsVsnprintf(char *str, size_t len,
     const char *fmt, va_list ap)
 {
     int retval = _vsnprintf(str, len, fmt, ap);
@@ -33,7 +32,7 @@ int epicsShareAPI epicsVsnprintf(char *str, size_t len,
     return retval;
 }
 
-int epicsShareAPI epicsSnprintf (char *str, size_t len, const char *fmt, ...)
+int LIBCOMSTD_API epicsSnprintf (char *str, size_t len, const char *fmt, ...)
 {
     int rtn;
     va_list pvar;
diff --git a/modules/libcom/src/osi/os/WIN32/osdStrtod.h b/modules/libcom/src/osi/os/WIN32/osdStrtod.h
index 4edb444..48f8f4a 100644
--- a/modules/libcom/src/osi/os/WIN32/osdStrtod.h
+++ b/modules/libcom/src/osi/os/WIN32/osdStrtod.h
@@ -16,7 +16,7 @@ extern "C" {
 /*
  * epicsStrtod() for systems with broken strtod() routine
  */
-epicsShareFunc double epicsStrtod(const char *str, char **endp); 
+LIBCOM_API double epicsStrtod(const char *str, char **endp); 
 
 /*
  * Microsoft apparently added strto[u]ll() in VS2013
diff --git a/modules/libcom/src/osi/os/WIN32/osdThread.c b/modules/libcom/src/osi/os/WIN32/osdThread.c
index 67a64bb..f7707fd 100644
--- a/modules/libcom/src/osi/os/WIN32/osdThread.c
+++ b/modules/libcom/src/osi/os/WIN32/osdThread.c
@@ -24,9 +24,8 @@
 #include <windows.h>
 #include <process.h> /* for _endthread() etc */
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "epicsThread.h"
 #include "cantProceed.h"
 #include "epicsAssert.h"
@@ -34,7 +33,7 @@
 #include "epicsExit.h"
 #include "epicsAtomic.h"
 
-epicsShareFunc void osdThreadHooksRun(epicsThreadId id);
+LIBCOM_API void osdThreadHooksRun(epicsThreadId id);
 
 void setThreadName ( DWORD dwThreadID, LPCSTR szThreadName );
 
@@ -247,7 +246,7 @@ static void epicsParmCleanupWIN32 ( win32ThreadParam * pParm )
 /*
  * epicsThreadExitMain ()
  */
-epicsShareFunc void epicsShareAPI epicsThreadExitMain ( void )
+LIBCOM_API void LIBCOMSTD_API epicsThreadExitMain ( void )
 {
     _endthread ();
 }
@@ -275,7 +274,7 @@ static unsigned osdPriorityMagFromPriorityOSI ( unsigned osiPriority, unsigned p
     return magnitude;
 }
 
-epicsShareFunc
+LIBCOM_API
 void epicsThreadRealtimeLock(void)
 {}
 
@@ -357,7 +356,7 @@ static unsigned epicsThreadGetOsiPriorityValue ( int osdPriority )
 /*
  * epicsThreadLowestPriorityLevelAbove ()
  */
-epicsShareFunc epicsThreadBooleanStatus epicsShareAPI epicsThreadLowestPriorityLevelAbove 
+LIBCOM_API epicsThreadBooleanStatus LIBCOMSTD_API epicsThreadLowestPriorityLevelAbove 
             ( unsigned int priority, unsigned * pPriorityJustAbove )
 {
     const DWORD priorityClass = GetPriorityClass ( GetCurrentProcess () );
@@ -387,7 +386,7 @@ epicsShareFunc epicsThreadBooleanStatus epicsShareAPI epicsThreadLowestPriorityL
 /*
  * epicsThreadHighestPriorityLevelBelow ()
  */
-epicsShareFunc epicsThreadBooleanStatus epicsShareAPI epicsThreadHighestPriorityLevelBelow 
+LIBCOM_API epicsThreadBooleanStatus LIBCOMSTD_API epicsThreadHighestPriorityLevelBelow 
             ( unsigned int priority, unsigned * pPriorityJustBelow )
 {
     const DWORD priorityClass = GetPriorityClass ( GetCurrentProcess () );
@@ -417,7 +416,7 @@ epicsShareFunc epicsThreadBooleanStatus epicsShareAPI epicsThreadHighestPriority
 /*
  * epicsThreadGetStackSize ()
  */
-epicsShareFunc unsigned int epicsShareAPI 
+LIBCOM_API unsigned int LIBCOMSTD_API 
     epicsThreadGetStackSize ( epicsThreadStackSizeClass stackSizeClass ) 
 {
     #define STACK_SIZE(f) (f * 0x10000 * sizeof(void *))
@@ -656,7 +655,7 @@ void epicsThreadMustJoin(epicsThreadId id)
 /*
  * epicsThreadSuspendSelf ()
  */
-epicsShareFunc void epicsShareAPI epicsThreadSuspendSelf ()
+LIBCOM_API void LIBCOMSTD_API epicsThreadSuspendSelf ()
 {
     win32ThreadGlobal * pGbl = fetchWin32ThreadGlobal ();
     win32ThreadParam * pParm;
@@ -681,7 +680,7 @@ epicsShareFunc void epicsShareAPI epicsThreadSuspendSelf ()
 /*
  * epicsThreadResume ()
  */
-epicsShareFunc void epicsShareAPI epicsThreadResume ( epicsThreadId id )
+LIBCOM_API void LIBCOMSTD_API epicsThreadResume ( epicsThreadId id )
 {
     win32ThreadGlobal * pGbl = fetchWin32ThreadGlobal ();
     win32ThreadParam * pParm = ( win32ThreadParam * ) id;
@@ -702,7 +701,7 @@ epicsShareFunc void epicsShareAPI epicsThreadResume ( epicsThreadId id )
 /*
  * epicsThreadGetPriority ()
  */
-epicsShareFunc unsigned epicsShareAPI epicsThreadGetPriority (epicsThreadId id) 
+LIBCOM_API unsigned LIBCOMSTD_API epicsThreadGetPriority (epicsThreadId id) 
 { 
     win32ThreadParam * pParm = ( win32ThreadParam * ) id;
     return pParm->epicsPriority;
@@ -711,7 +710,7 @@ epicsShareFunc unsigned epicsShareAPI epicsThreadGetPriority (epicsThreadId id)
 /*
  * epicsThreadGetPrioritySelf ()
  */
-epicsShareFunc unsigned epicsShareAPI epicsThreadGetPrioritySelf () 
+LIBCOM_API unsigned LIBCOMSTD_API epicsThreadGetPrioritySelf () 
 { 
     win32ThreadGlobal * pGbl = fetchWin32ThreadGlobal ();
     win32ThreadParam * pParm;
@@ -737,7 +736,7 @@ epicsShareFunc unsigned epicsShareAPI epicsThreadGetPrioritySelf ()
 /*
  * epicsThreadSetPriority ()
  */
-epicsShareFunc void epicsShareAPI epicsThreadSetPriority ( epicsThreadId id, unsigned priority ) 
+LIBCOM_API void LIBCOMSTD_API epicsThreadSetPriority ( epicsThreadId id, unsigned priority ) 
 {
     win32ThreadParam * pParm = ( win32ThreadParam * ) id;
     BOOL stat = SetThreadPriority ( pParm->handle, epicsThreadGetOsdPriorityValue (priority) );
@@ -747,7 +746,7 @@ epicsShareFunc void epicsShareAPI epicsThreadSetPriority ( epicsThreadId id, uns
 /*
  * epicsThreadIsEqual ()
  */
-epicsShareFunc int epicsShareAPI epicsThreadIsEqual ( epicsThreadId id1, epicsThreadId id2 ) 
+LIBCOM_API int LIBCOMSTD_API epicsThreadIsEqual ( epicsThreadId id1, epicsThreadId id2 ) 
 {
     win32ThreadParam * pParm1 = ( win32ThreadParam * ) id1;
     win32ThreadParam * pParm2 = ( win32ThreadParam * ) id2;
@@ -757,7 +756,7 @@ epicsShareFunc int epicsShareAPI epicsThreadIsEqual ( epicsThreadId id1, epicsTh
 /*
  * epicsThreadIsSuspended () 
  */
-epicsShareFunc int epicsShareAPI epicsThreadIsSuspended ( epicsThreadId id ) 
+LIBCOM_API int LIBCOMSTD_API epicsThreadIsSuspended ( epicsThreadId id ) 
 {
     win32ThreadParam *pParm = ( win32ThreadParam * ) id;
     DWORD exitCode;
@@ -780,7 +779,7 @@ epicsShareFunc int epicsShareAPI epicsThreadIsSuspended ( epicsThreadId id )
 /*
  * epicsThreadSleep ()
  */
-epicsShareFunc void epicsShareAPI epicsThreadSleep ( double seconds )
+LIBCOM_API void LIBCOMSTD_API epicsThreadSleep ( double seconds )
 {
     static const unsigned mSecPerSec = 1000;
     DWORD milliSecDelay;
@@ -800,7 +799,7 @@ epicsShareFunc void epicsShareAPI epicsThreadSleep ( double seconds )
 /*
  * epicsThreadSleepQuantum ()
  */
-double epicsShareAPI epicsThreadSleepQuantum ()
+double LIBCOMSTD_API epicsThreadSleepQuantum ()
 { 
     /*
      * Its worth noting here that the sleep quantum on windows can
@@ -832,7 +831,7 @@ double epicsShareAPI epicsThreadSleepQuantum ()
 /*
  * epicsThreadGetIdSelf ()
  */
-epicsShareFunc epicsThreadId epicsShareAPI epicsThreadGetIdSelf (void) 
+LIBCOM_API epicsThreadId LIBCOMSTD_API epicsThreadGetIdSelf (void) 
 {
     win32ThreadGlobal * pGbl = fetchWin32ThreadGlobal ();
     win32ThreadParam * pParm;
@@ -848,7 +847,7 @@ epicsShareFunc epicsThreadId epicsShareAPI epicsThreadGetIdSelf (void)
     return ( epicsThreadId ) pParm;
 }
 
-epicsShareFunc epicsThreadId epicsShareAPI epicsThreadGetId ( const char * pName )
+LIBCOM_API epicsThreadId LIBCOMSTD_API epicsThreadGetId ( const char * pName )
 {
     win32ThreadGlobal * pGbl = fetchWin32ThreadGlobal ();
     win32ThreadParam * pParm;
@@ -879,7 +878,7 @@ epicsShareFunc epicsThreadId epicsShareAPI epicsThreadGetId ( const char * pName
 /*
  * epicsThreadGetNameSelf ()
  */
-epicsShareFunc const char * epicsShareAPI epicsThreadGetNameSelf (void)
+LIBCOM_API const char * LIBCOMSTD_API epicsThreadGetNameSelf (void)
 {
     win32ThreadGlobal * pGbl = fetchWin32ThreadGlobal ();
     win32ThreadParam * pParm;
@@ -905,7 +904,7 @@ epicsShareFunc const char * epicsShareAPI epicsThreadGetNameSelf (void)
 /*
  * epicsThreadGetName ()
  */
-epicsShareFunc void epicsShareAPI epicsThreadGetName ( 
+LIBCOM_API void LIBCOMSTD_API epicsThreadGetName ( 
     epicsThreadId id, char * pName, size_t size )
 {
     win32ThreadParam * pParm = ( win32ThreadParam * ) id;
@@ -980,7 +979,7 @@ static void epicsThreadShowInfo ( epicsThreadId id, unsigned level )
 /*
  * epicsThreadMap ()
  */
-epicsShareFunc void epicsThreadMap ( EPICS_THREAD_HOOK_ROUTINE func )
+LIBCOM_API void epicsThreadMap ( EPICS_THREAD_HOOK_ROUTINE func )
 {
     win32ThreadGlobal * pGbl = fetchWin32ThreadGlobal ();
     win32ThreadParam * pParm;
@@ -1002,7 +1001,7 @@ epicsShareFunc void epicsThreadMap ( EPICS_THREAD_HOOK_ROUTINE func )
 /*
  * epicsThreadShowAll ()
  */
-epicsShareFunc void epicsShareAPI epicsThreadShowAll ( unsigned level )
+LIBCOM_API void LIBCOMSTD_API epicsThreadShowAll ( unsigned level )
 {
     win32ThreadGlobal * pGbl = fetchWin32ThreadGlobal ();
     win32ThreadParam * pParm;
@@ -1025,7 +1024,7 @@ epicsShareFunc void epicsShareAPI epicsThreadShowAll ( unsigned level )
 /*
  * epicsThreadShow ()
  */
-epicsShareFunc void epicsShareAPI epicsThreadShow ( epicsThreadId id, unsigned level )
+LIBCOM_API void LIBCOMSTD_API epicsThreadShow ( epicsThreadId id, unsigned level )
 {
     epicsThreadShowInfo ( 0, level );
     epicsThreadShowInfo ( id, level );
@@ -1034,7 +1033,7 @@ epicsShareFunc void epicsShareAPI epicsThreadShow ( epicsThreadId id, unsigned l
 /*
  * epicsThreadOnce ()
  */
-epicsShareFunc void epicsShareAPI epicsThreadOnce (
+LIBCOM_API void LIBCOMSTD_API epicsThreadOnce (
     epicsThreadOnceId *id, void (*func)(void *), void *arg )
 {
     static struct epicsThreadOSD threadOnceComplete;
@@ -1069,7 +1068,7 @@ epicsShareFunc void epicsShareAPI epicsThreadOnce (
 /*
  * epicsThreadPrivateCreate ()
  */
-epicsShareFunc epicsThreadPrivateId epicsShareAPI epicsThreadPrivateCreate ()
+LIBCOM_API epicsThreadPrivateId LIBCOMSTD_API epicsThreadPrivateCreate ()
 {
     epicsThreadPrivateOSD *p = ( epicsThreadPrivateOSD * ) malloc ( sizeof ( *p ) );
     if ( p ) {
@@ -1085,7 +1084,7 @@ epicsShareFunc epicsThreadPrivateId epicsShareAPI epicsThreadPrivateCreate ()
 /*
  * epicsThreadPrivateDelete ()
  */
-epicsShareFunc void epicsShareAPI epicsThreadPrivateDelete ( epicsThreadPrivateId p )
+LIBCOM_API void LIBCOMSTD_API epicsThreadPrivateDelete ( epicsThreadPrivateId p )
 {
     BOOL stat = TlsFree ( p->key );
     assert ( stat );
@@ -1095,7 +1094,7 @@ epicsShareFunc void epicsShareAPI epicsThreadPrivateDelete ( epicsThreadPrivateI
 /*
  * epicsThreadPrivateSet ()
  */
-epicsShareFunc void epicsShareAPI epicsThreadPrivateSet ( epicsThreadPrivateId pPvt, void *pVal )
+LIBCOM_API void LIBCOMSTD_API epicsThreadPrivateSet ( epicsThreadPrivateId pPvt, void *pVal )
 {
     BOOL stat = TlsSetValue ( pPvt->key, (void *) pVal );
     assert (stat);
@@ -1104,7 +1103,7 @@ epicsShareFunc void epicsShareAPI epicsThreadPrivateSet ( epicsThreadPrivateId p
 /*
  * epicsThreadPrivateGet ()
  */
-epicsShareFunc void * epicsShareAPI epicsThreadPrivateGet ( epicsThreadPrivateId pPvt )
+LIBCOM_API void * LIBCOMSTD_API epicsThreadPrivateGet ( epicsThreadPrivateId pPvt )
 {
     return ( void * ) TlsGetValue ( pPvt->key );
 }
@@ -1112,7 +1111,7 @@ epicsShareFunc void * epicsShareAPI epicsThreadPrivateGet ( epicsThreadPrivateId
 /*
  * epicsThreadGetCPUs ()
  */
-epicsShareFunc int epicsThreadGetCPUs ( void )
+LIBCOM_API int epicsThreadGetCPUs ( void )
 {
     SYSTEM_INFO sysinfo;
     GetSystemInfo(&sysinfo);
diff --git a/modules/libcom/src/osi/os/WIN32/osdThreadExtra.c b/modules/libcom/src/osi/os/WIN32/osdThreadExtra.c
index 0a7c7ae..f456280 100644
--- a/modules/libcom/src/osi/os/WIN32/osdThreadExtra.c
+++ b/modules/libcom/src/osi/os/WIN32/osdThreadExtra.c
@@ -9,8 +9,7 @@
 
 /* Null default thread hooks for all platforms that do not do anything special */
 
-#define epicsExportSharedSymbols
 #include "epicsThread.h"
 
-epicsShareDef EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault;
-epicsShareDef EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain;
+EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault;
+EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain;
diff --git a/modules/libcom/src/osi/os/WIN32/osdTime.cpp b/modules/libcom/src/osi/os/WIN32/osdTime.cpp
index 1b1a705..f9cfcc9 100644
--- a/modules/libcom/src/osi/os/WIN32/osdTime.cpp
+++ b/modules/libcom/src/osi/os/WIN32/osdTime.cpp
@@ -30,7 +30,6 @@
 //
 // EPICS
 //
-#define epicsExportSharedSymbols
 #define EPICS_EXPOSE_LIBCOM_MONOTONIC_PRIVATE
 #include "epicsTime.h"
 #include "generalTimeSup.h"
@@ -126,7 +125,7 @@ int osdTimeGetCurrent ( epicsTimeStamp *pDest )
 }
 
 // synthesize a reentrant gmtime on WIN32
-int epicsShareAPI epicsTime_gmtime ( const time_t *pAnsiTime, struct tm *pTM )
+int LIBCOMSTD_API epicsTime_gmtime ( const time_t *pAnsiTime, struct tm *pTM )
 {
     struct tm * pRet = gmtime ( pAnsiTime );
     if ( pRet ) {
@@ -139,7 +138,7 @@ int epicsShareAPI epicsTime_gmtime ( const time_t *pAnsiTime, struct tm *pTM )
 }
 
 // synthesize a reentrant localtime on WIN32
-int epicsShareAPI epicsTime_localtime (
+int LIBCOMSTD_API epicsTime_localtime (
     const time_t * pAnsiTime, struct tm * pTM )
 {
     struct tm * pRet = localtime ( pAnsiTime );
diff --git a/modules/libcom/src/osi/os/WIN32/osdgetexec.c b/modules/libcom/src/osi/os/WIN32/osdgetexec.c
index a46ce50..a5c07b0 100644
--- a/modules/libcom/src/osi/os/WIN32/osdgetexec.c
+++ b/modules/libcom/src/osi/os/WIN32/osdgetexec.c
@@ -3,7 +3,6 @@
 #include <stdlib.h>
 #include <windows.h>
 
-#define epicsExportSharedSymbols
 #include <osiFileName.h>
 
 char *epicsGetExecName(void)
diff --git a/modules/libcom/src/osi/os/WIN32/osiFileName.h b/modules/libcom/src/osi/os/WIN32/osiFileName.h
index ced745f..a19e0ca 100644
--- a/modules/libcom/src/osi/os/WIN32/osiFileName.h
+++ b/modules/libcom/src/osi/os/WIN32/osiFileName.h
@@ -15,7 +15,7 @@
 #ifndef osiFileNameH
 #define osiFileNameH
 
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -27,13 +27,13 @@ extern "C" {
 /** Return the absolute path of the current executable.
  @returns NULL or the path.  Caller must free()
  */
-epicsShareFunc
+LIBCOM_API
 char *epicsGetExecName(void);
 
 /** Return the absolute path of the directory containing the current executable.
  @returns NULL or the path.  Caller must free()
  */
-epicsShareFunc
+LIBCOM_API
 char *epicsGetExecDir(void);
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/osi/os/WIN32/systemCallIntMech.cpp b/modules/libcom/src/osi/os/WIN32/systemCallIntMech.cpp
index 5e13299..7da3916 100644
--- a/modules/libcom/src/osi/os/WIN32/systemCallIntMech.cpp
+++ b/modules/libcom/src/osi/os/WIN32/systemCallIntMech.cpp
@@ -12,7 +12,6 @@
  *      Author:		Jeff Hill 
  */
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 
 enum epicsSocketSystemCallInterruptMechanismQueryInfo 
diff --git a/modules/libcom/src/osi/os/cygwin32/devLibVMEOSD.c b/modules/libcom/src/osi/os/cygwin32/devLibVMEOSD.c
index 53cbd58..17a1c14 100644
--- a/modules/libcom/src/osi/os/cygwin32/devLibVMEOSD.c
+++ b/modules/libcom/src/osi/os/cygwin32/devLibVMEOSD.c
@@ -7,7 +7,6 @@
 
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include "devLibVME.h"
 
-epicsShareDef devLibVME *pdevLibVME = NULL;
+devLibVME *pdevLibVME = NULL;
diff --git a/modules/libcom/src/osi/os/cygwin32/osdSockAddrReuse.cpp b/modules/libcom/src/osi/os/cygwin32/osdSockAddrReuse.cpp
index d441d75..68195be 100644
--- a/modules/libcom/src/osi/os/cygwin32/osdSockAddrReuse.cpp
+++ b/modules/libcom/src/osi/os/cygwin32/osdSockAddrReuse.cpp
@@ -13,7 +13,6 @@
  * Author: Jeff Hill
  */
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 #include "errlog.h"
 
@@ -24,12 +23,12 @@
  * Also, servers are always enabled to reuse a port immediately after 
  * they exit ( even if SO_REUSEADDR isnt set ).
  */
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsSocketEnableAddressReuseDuringTimeWaitState ( SOCKET s )
 {
 }
 
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsSocketEnableAddressUseForDatagramFanout ( SOCKET s )
 {
     int yes = true;
diff --git a/modules/libcom/src/osi/os/cygwin32/osdStrtod.h b/modules/libcom/src/osi/os/cygwin32/osdStrtod.h
index b5fda31..395cacd 100644
--- a/modules/libcom/src/osi/os/cygwin32/osdStrtod.h
+++ b/modules/libcom/src/osi/os/cygwin32/osdStrtod.h
@@ -16,7 +16,7 @@ extern "C" {
 /*
  * epicsStrtod() for systems with broken strtod() routine
  */
-epicsShareFunc double epicsStrtod(const char *str, char **endp); 
+LIBCOM_API double epicsStrtod(const char *str, char **endp); 
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/os/cygwin32/osiFileName.h b/modules/libcom/src/osi/os/cygwin32/osiFileName.h
index 1e77990..130b866 100644
--- a/modules/libcom/src/osi/os/cygwin32/osiFileName.h
+++ b/modules/libcom/src/osi/os/cygwin32/osiFileName.h
@@ -14,7 +14,7 @@
 #ifndef osiFileNameH
 #define osiFileNameH
 
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -26,13 +26,13 @@ extern "C" {
 /** Return the absolute path of the current executable.
  @returns NULL or the path.  Caller must free()
  */
-epicsShareFunc
+LIBCOM_API
 char *epicsGetExecName(void);
 
 /** Return the absolute path of the directory containing the current executable.
  @returns NULL or the path.  Caller must free()
  */
-epicsShareFunc
+LIBCOM_API
 char *epicsGetExecDir(void);
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/osi/os/cygwin32/systemCallIntMech.cpp b/modules/libcom/src/osi/os/cygwin32/systemCallIntMech.cpp
index 9c0df32..dbcb14d 100644
--- a/modules/libcom/src/osi/os/cygwin32/systemCallIntMech.cpp
+++ b/modules/libcom/src/osi/os/cygwin32/systemCallIntMech.cpp
@@ -12,7 +12,6 @@
 
 #include <cygwin/version.h>
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 
 enum epicsSocketSystemCallInterruptMechanismQueryInfo 
diff --git a/modules/libcom/src/osi/os/default/devLibVMEOSD.c b/modules/libcom/src/osi/os/default/devLibVMEOSD.c
index b8b1d50..0de29f2 100644
--- a/modules/libcom/src/osi/os/default/devLibVMEOSD.c
+++ b/modules/libcom/src/osi/os/default/devLibVMEOSD.c
@@ -7,9 +7,8 @@
 
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include "devLibVME.h"
 
 /* This file must contain no definitions other than the following: */
 
-epicsShareDef devLibVME *pdevLibVME;
+devLibVME *pdevLibVME;
diff --git a/modules/libcom/src/osi/os/default/epicsMMIODef.h b/modules/libcom/src/osi/os/default/epicsMMIODef.h
index dc4bb4c..52b8f61 100644
--- a/modules/libcom/src/osi/os/default/epicsMMIODef.h
+++ b/modules/libcom/src/osi/os/default/epicsMMIODef.h
@@ -14,7 +14,7 @@
 #include <epicsTypes.h>
 #include <epicsEndian.h>
 #include <compilerSpecific.h>
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #ifdef __cplusplus
 #  ifndef INLINE
diff --git a/modules/libcom/src/osi/os/default/epicsSocketConvertErrnoToString.cpp b/modules/libcom/src/osi/os/default/epicsSocketConvertErrnoToString.cpp
index 3cbfce6..062560f 100644
--- a/modules/libcom/src/osi/os/default/epicsSocketConvertErrnoToString.cpp
+++ b/modules/libcom/src/osi/os/default/epicsSocketConvertErrnoToString.cpp
@@ -15,7 +15,6 @@
 
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 
 /*
diff --git a/modules/libcom/src/osi/os/default/osdAssert.c b/modules/libcom/src/osi/os/default/osdAssert.c
index 14d548c..109ec98 100644
--- a/modules/libcom/src/osi/os/default/osdAssert.c
+++ b/modules/libcom/src/osi/os/default/osdAssert.c
@@ -11,7 +11,6 @@
  *      Date:           02-27-95
  */
 
-#define epicsExportSharedSymbols
 #include "dbDefs.h"
 #include "epicsPrint.h"
 #include "epicsVersion.h"
diff --git a/modules/libcom/src/osi/os/default/osdBackTrace.cpp b/modules/libcom/src/osi/os/default/osdBackTrace.cpp
index e1f96c0..0a2fdfc 100644
--- a/modules/libcom/src/osi/os/default/osdBackTrace.cpp
+++ b/modules/libcom/src/osi/os/default/osdBackTrace.cpp
@@ -7,7 +7,6 @@
  * Author: Till Straumann <[email protected]>, 2011, 2014
  */ 
 
-#define epicsExportSharedSymbols
 #include "epicsStackTracePvt.h"
 
 int epicsBackTrace(void **buf, int buf_sz)
diff --git a/modules/libcom/src/osi/os/default/osdEnv.c b/modules/libcom/src/osi/os/default/osdEnv.c
index b74856d..3aca265 100644
--- a/modules/libcom/src/osi/os/default/osdEnv.c
+++ b/modules/libcom/src/osi/os/default/osdEnv.c
@@ -18,7 +18,6 @@
 #include <ctype.h>
 #include <errno.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 #include "errlog.h"
 #include "cantProceed.h"
@@ -32,7 +31,7 @@
  * Leaks memory, but the assumption is that this routine won't be
  * called often enough for the leak to be a problem.
  */
-epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *value)
+LIBCOM_API void LIBCOMSTD_API epicsEnvSet (const char *name, const char *value)
 {
     char *cp;
 
@@ -61,7 +60,7 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val
  * Using putenv with a an existing name but without "=..." deletes
  */
 
-epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvUnset (const char *name)
 {
     iocshEnvClear(name);
     if (getenv(name) != NULL)
@@ -71,7 +70,7 @@ epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
 /*
  * Show the value of the specified, or all, environment variables
  */
-epicsShareFunc void epicsShareAPI epicsEnvShow (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvShow (const char *name)
 {
     if (name == NULL) {
         extern char **environ;
diff --git a/modules/libcom/src/osi/os/default/osdFindAddr.c b/modules/libcom/src/osi/os/default/osdFindAddr.c
index 582dd54..9f3089e 100644
--- a/modules/libcom/src/osi/os/default/osdFindAddr.c
+++ b/modules/libcom/src/osi/os/default/osdFindAddr.c
@@ -7,7 +7,6 @@
  * Author: Till Straumann <[email protected]>, 2011, 2014
  */ 
 
-#define epicsExportSharedSymbols
 #include "epicsStackTracePvt.h"
 #include "epicsStackTrace.h"
 
diff --git a/modules/libcom/src/osi/os/default/osdFindSymbol.c b/modules/libcom/src/osi/os/default/osdFindSymbol.c
index 9d9a887..a22b1c9 100644
--- a/modules/libcom/src/osi/os/default/osdFindSymbol.c
+++ b/modules/libcom/src/osi/os/default/osdFindSymbol.c
@@ -8,20 +8,19 @@
 \*************************************************************************/
 /* osi/os/default/osdFindSymbol.c */
 
-#define epicsExportSharedSymbols
 #include "epicsFindSymbol.h"
 
-epicsShareFunc void * epicsLoadLibrary(const char *name)
+LIBCOM_API void * epicsLoadLibrary(const char *name)
 {
     return 0;
 }
 
-epicsShareFunc const char *epicsLoadError(void)
+LIBCOM_API const char *epicsLoadError(void)
 {
     return "epicsLoadLibrary not implemented";
 }
 
-epicsShareFunc void * epicsShareAPI epicsFindSymbol(const char *name)
+LIBCOM_API void * LIBCOMSTD_API epicsFindSymbol(const char *name)
 {
     return 0;
 }
diff --git a/modules/libcom/src/osi/os/default/osdInterrupt.c b/modules/libcom/src/osi/os/default/osdInterrupt.c
index 91c5c56..2aec723 100644
--- a/modules/libcom/src/osi/os/default/osdInterrupt.c
+++ b/modules/libcom/src/osi/os/default/osdInterrupt.c
@@ -16,7 +16,6 @@
 #include <stddef.h>
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "epicsMutex.h"
 #include "epicsThread.h"
 #include "cantProceed.h"
@@ -32,26 +31,26 @@ static void initOnce(void *junk)
     globalLock = epicsMutexMustCreate();
 }
 
-epicsShareFunc int epicsInterruptLock()
+LIBCOM_API int epicsInterruptLock()
 {
     epicsThreadOnce(&onceId, initOnce, NULL);
     epicsMutexMustLock(globalLock);
     return 0;
 }
 
-epicsShareFunc void epicsInterruptUnlock(int key)
+LIBCOM_API void epicsInterruptUnlock(int key)
 {
     if (!globalLock)
         cantProceed("epicsInterruptUnlock called before epicsInterruptLock\n");
     epicsMutexUnlock(globalLock);
 }
 
-epicsShareFunc int epicsInterruptIsInterruptContext()
+LIBCOM_API int epicsInterruptIsInterruptContext()
 {
     return 0;
 }
 
-epicsShareFunc void epicsInterruptContextMessage(const char *message)
+LIBCOM_API void epicsInterruptContextMessage(const char *message)
 {
     errlogPrintf("%s", message);
 }
diff --git a/modules/libcom/src/osi/os/default/osdMessageQueue.cpp b/modules/libcom/src/osi/os/default/osdMessageQueue.cpp
index c86d8cc..ab6ec1c 100644
--- a/modules/libcom/src/osi/os/default/osdMessageQueue.cpp
+++ b/modules/libcom/src/osi/os/default/osdMessageQueue.cpp
@@ -19,7 +19,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "epicsMessageQueue.h"
 #include <ellLib.h>
 #include <epicsAssert.h>
@@ -68,7 +67,7 @@ struct epicsMessageQueueOSD {
     bool            full;
 };
 
-epicsShareFunc epicsMessageQueueId epicsShareAPI epicsMessageQueueCreate(
+LIBCOM_API epicsMessageQueueId LIBCOMSTD_API epicsMessageQueueCreate(
     unsigned int capacity,
     unsigned int maxMessageSize)
 {
@@ -115,7 +114,7 @@ freeEventNode(struct eventNode *enode)
     free(enode);
 }
 
-epicsShareFunc void epicsShareAPI
+LIBCOM_API void LIBCOMSTD_API
 epicsMessageQueueDestroy(epicsMessageQueueId pmsg)
 {
     struct eventNode *evp;
@@ -241,21 +240,21 @@ mySend(epicsMessageQueueId pmsg, void *message, unsigned int size,
     return 0;
 }
 
-epicsShareFunc int epicsShareAPI
+LIBCOM_API int LIBCOMSTD_API
 epicsMessageQueueTrySend(epicsMessageQueueId pmsg, void *message,
     unsigned int size)
 {
     return mySend(pmsg, message, size, 0);
 }
 
-epicsShareFunc int epicsShareAPI
+LIBCOM_API int LIBCOMSTD_API
 epicsMessageQueueSend(epicsMessageQueueId pmsg, void *message,
     unsigned int size)
 {
     return mySend(pmsg, message, size, -1);
 }
 
-epicsShareFunc int epicsShareAPI
+LIBCOM_API int LIBCOMSTD_API
 epicsMessageQueueSendWithTimeout(epicsMessageQueueId pmsg, void *message,
     unsigned int size, double timeout)
 {
@@ -358,28 +357,28 @@ myReceive(epicsMessageQueueId pmsg, void *message, unsigned int size,
     return -1;
 }
 
-epicsShareFunc int epicsShareAPI
+LIBCOM_API int LIBCOMSTD_API
 epicsMessageQueueTryReceive(epicsMessageQueueId pmsg, void *message,
     unsigned int size)
 {
     return myReceive(pmsg, message, size, 0);
 }
 
-epicsShareFunc int epicsShareAPI
+LIBCOM_API int LIBCOMSTD_API
 epicsMessageQueueReceive(epicsMessageQueueId pmsg, void *message,
     unsigned int size)
 {
     return myReceive(pmsg, message, size, -1);
 }
 
-epicsShareFunc int epicsShareAPI
+LIBCOM_API int LIBCOMSTD_API
 epicsMessageQueueReceiveWithTimeout(epicsMessageQueueId pmsg, void *message,
     unsigned int size, double timeout)
 {
     return myReceive(pmsg, message, size, timeout);
 }
 
-epicsShareFunc int epicsShareAPI
+LIBCOM_API int LIBCOMSTD_API
 epicsMessageQueuePending(epicsMessageQueueId pmsg)
 {
     char *myInPtr, *myOutPtr;
@@ -398,7 +397,7 @@ epicsMessageQueuePending(epicsMessageQueueId pmsg)
     return nmsg;
 }
 
-epicsShareFunc void epicsShareAPI
+LIBCOM_API void LIBCOMSTD_API
 epicsMessageQueueShow(epicsMessageQueueId pmsg, int level)
 {
     printf("Message Queue Used:%d  Slots:%lu", epicsMessageQueuePending(pmsg), pmsg->capacity);
diff --git a/modules/libcom/src/osi/os/default/osdNetIntf.c b/modules/libcom/src/osi/os/default/osdNetIntf.c
index 62247bc..706ffa3 100644
--- a/modules/libcom/src/osi/os/default/osdNetIntf.c
+++ b/modules/libcom/src/osi/os/default/osdNetIntf.c
@@ -18,7 +18,6 @@
 #include <string.h>
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 #include "epicsAssert.h"
 #include "errlog.h"
@@ -65,7 +64,7 @@ static struct ifreq * ifreqNext ( struct ifreq *pifreq )
 /*
  * osiSockDiscoverBroadcastAddresses ()
  */
-epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
+LIBCOM_API void LIBCOMSTD_API osiSockDiscoverBroadcastAddresses
      (ELLLIST *pList, SOCKET socket, const osiSockAddr *pMatchAddr)
 {
     static const unsigned           nelem = 100;
@@ -345,7 +344,7 @@ fail:
 }
 
 
-epicsShareFunc osiSockAddr epicsShareAPI osiLocalAddr (SOCKET socket)
+LIBCOM_API osiSockAddr LIBCOMSTD_API osiLocalAddr (SOCKET socket)
 {
     epicsThreadOnce(&osiLocalAddrId, osiLocalAddrOnce, &socket);
     return osiLocalAddrResult;
diff --git a/modules/libcom/src/osi/os/default/osdPoolStatus.c b/modules/libcom/src/osi/os/default/osdPoolStatus.c
index bb764b2..f0b2679 100644
--- a/modules/libcom/src/osi/os/default/osdPoolStatus.c
+++ b/modules/libcom/src/osi/os/default/osdPoolStatus.c
@@ -8,7 +8,6 @@
 * in file LICENSE that is included with this distribution. 
 \*************************************************************************/
 
-#define epicsExportSharedSymbols
 #include "osiPoolStatus.h"
 
 /*
@@ -17,7 +16,7 @@
  * @@@@@ not implemented @@@@@
  *
  */
-epicsShareFunc int epicsShareAPI osiSufficentSpaceInPool ( size_t contiguousBlockSize )
+LIBCOM_API int LIBCOMSTD_API osiSufficentSpaceInPool ( size_t contiguousBlockSize )
 {
     return 1;
 }
diff --git a/modules/libcom/src/osi/os/default/osdSignal.cpp b/modules/libcom/src/osi/os/default/osdSignal.cpp
index 08dfa02..c4de5c2 100644
--- a/modules/libcom/src/osi/os/default/osdSignal.cpp
+++ b/modules/libcom/src/osi/os/default/osdSignal.cpp
@@ -8,14 +8,13 @@
  * in file LICENSE that is included with this distribution. 
 \*************************************************************************/
 
-#define epicsExportSharedSymbols
 #include "epicsSignal.h"
 
 /*
  * All NOOPs if the os isnt POSIX
  */
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigHupIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigAlarmIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * /* threadId */ ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigHupIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigPipeIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigAlarmIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * /* threadId */ ) {}
 
diff --git a/modules/libcom/src/osi/os/default/osdSpin.c b/modules/libcom/src/osi/os/default/osdSpin.c
index 6e9acb1..eb9cc1f 100644
--- a/modules/libcom/src/osi/os/default/osdSpin.c
+++ b/modules/libcom/src/osi/os/default/osdSpin.c
@@ -12,7 +12,6 @@
 
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include "cantProceed.h"
 #include "errlog.h"
 #include "epicsMutex.h"
diff --git a/modules/libcom/src/osi/os/default/osdThreadExtra.c b/modules/libcom/src/osi/os/default/osdThreadExtra.c
index 0a7c7ae..f456280 100644
--- a/modules/libcom/src/osi/os/default/osdThreadExtra.c
+++ b/modules/libcom/src/osi/os/default/osdThreadExtra.c
@@ -9,8 +9,7 @@
 
 /* Null default thread hooks for all platforms that do not do anything special */
 
-#define epicsExportSharedSymbols
 #include "epicsThread.h"
 
-epicsShareDef EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault;
-epicsShareDef EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain;
+EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault;
+EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain;
diff --git a/modules/libcom/src/osi/os/default/osdThreadHooks.c b/modules/libcom/src/osi/os/default/osdThreadHooks.c
index cbe28a4..924c1a2 100644
--- a/modules/libcom/src/osi/os/default/osdThreadHooks.c
+++ b/modules/libcom/src/osi/os/default/osdThreadHooks.c
@@ -16,13 +16,12 @@
 #include <errno.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "ellLib.h"
 #include "epicsMutex.h"
 #include "epicsThread.h"
 
-epicsShareExtern EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault;
-epicsShareExtern EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain;
+LIBCOM_API extern EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault;
+LIBCOM_API extern EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain;
 
 typedef struct epicsThreadHook {
     ELLNODE                   node;
@@ -52,7 +51,7 @@ static void threadHookInit(void)
     epicsThreadOnce(&flag, threadHookOnce, NULL);
 }
 
-epicsShareFunc int epicsThreadHookAdd(EPICS_THREAD_HOOK_ROUTINE hook)
+LIBCOM_API int epicsThreadHookAdd(EPICS_THREAD_HOOK_ROUTINE hook)
 {
     epicsThreadHook *pHook;
 
@@ -75,7 +74,7 @@ epicsShareFunc int epicsThreadHookAdd(EPICS_THREAD_HOOK_ROUTINE hook)
     return -1;
 }
 
-epicsShareFunc int epicsThreadHookDelete(EPICS_THREAD_HOOK_ROUTINE hook)
+LIBCOM_API int epicsThreadHookDelete(EPICS_THREAD_HOOK_ROUTINE hook)
 {
     if (!hook) return 0;
     threadHookInit();
@@ -97,13 +96,13 @@ epicsShareFunc int epicsThreadHookDelete(EPICS_THREAD_HOOK_ROUTINE hook)
     return -1;
 }
 
-epicsShareFunc void osdThreadHooksRunMain(epicsThreadId id)
+LIBCOM_API void osdThreadHooksRunMain(epicsThreadId id)
 {
     if (epicsThreadHookMain)
         epicsThreadHookMain(id);
 }
 
-epicsShareFunc void osdThreadHooksRun(epicsThreadId id)
+LIBCOM_API void osdThreadHooksRun(epicsThreadId id)
 {
     threadHookInit();
 
@@ -121,7 +120,7 @@ epicsShareFunc void osdThreadHooksRun(epicsThreadId id)
     }
 }
 
-epicsShareFunc void epicsThreadHooksShow(void)
+LIBCOM_API void epicsThreadHooksShow(void)
 {
     threadHookInit();
 
diff --git a/modules/libcom/src/osi/os/default/osdgetexec.c b/modules/libcom/src/osi/os/default/osdgetexec.c
index 0bec9ea..9965965 100644
--- a/modules/libcom/src/osi/os/default/osdgetexec.c
+++ b/modules/libcom/src/osi/os/default/osdgetexec.c
@@ -1,6 +1,5 @@
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include <osiFileName.h>
 
 char *epicsGetExecName(void)
diff --git a/modules/libcom/src/osi/os/freebsd/osdTime.h b/modules/libcom/src/osi/os/freebsd/osdTime.h
index 941426c..68aba06 100644
--- a/modules/libcom/src/osi/os/freebsd/osdTime.h
+++ b/modules/libcom/src/osi/os/freebsd/osdTime.h
@@ -20,7 +20,7 @@
 extern "C" {
 #endif /* __cplusplus */
 
-epicsShareFunc void epicsShareAPI
+LIBCOM_API void LIBCOMSTD_API
     convertDoubleToWakeTime(double timeout,struct timespec *wakeTime);
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/osi/os/freebsd/osdgetexec.c b/modules/libcom/src/osi/os/freebsd/osdgetexec.c
index 39c0a16..b88fd61 100644
--- a/modules/libcom/src/osi/os/freebsd/osdgetexec.c
+++ b/modules/libcom/src/osi/os/freebsd/osdgetexec.c
@@ -4,7 +4,6 @@
 #include <unistd.h>
 #include <limits.h>
 
-#define epicsExportSharedSymbols
 #include <osiFileName.h>
 
 char *epicsGetExecName(void)
diff --git a/modules/libcom/src/osi/os/iOS/epicsMath.h b/modules/libcom/src/osi/os/iOS/epicsMath.h
index 493583f..0736058 100644
--- a/modules/libcom/src/osi/os/iOS/epicsMath.h
+++ b/modules/libcom/src/osi/os/iOS/epicsMath.h
@@ -9,7 +9,7 @@
 #define epicsMathh
 
 #include <math.h>
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #define finite(x) isfinite(x)
 
@@ -17,8 +17,8 @@
 extern "C" {
 #endif
 
-epicsShareExtern float epicsNAN;
-epicsShareExtern float epicsINF;
+LIBCOM_API extern float epicsNAN;
+LIBCOM_API extern float epicsINF;
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/os/iOS/osdEnv.c b/modules/libcom/src/osi/os/iOS/osdEnv.c
index ba2946a..eb583b3 100644
--- a/modules/libcom/src/osi/os/iOS/osdEnv.c
+++ b/modules/libcom/src/osi/os/iOS/osdEnv.c
@@ -18,7 +18,6 @@
 #include <ctype.h>
 #include <errno.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 #include <errlog.h>
 #include <cantProceed.h>
@@ -30,7 +29,7 @@
 /*
  * Set the value of an environment variable
  */
-epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *value)
+LIBCOM_API void LIBCOMSTD_API epicsEnvSet (const char *name, const char *value)
 {
     if (!name) return;
     iocshEnvClear(name);
@@ -41,7 +40,7 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val
  * Unset an environment variable
  */
 
-epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvUnset (const char *name)
 {
     iocshEnvClear(name);
     unsetenv(name);
@@ -50,7 +49,7 @@ epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
 /*
  * Show the value of the specified, or all, environment variables
  */
-epicsShareFunc void epicsShareAPI epicsEnvShow (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvShow (const char *name)
 {
     if (name == NULL) {
         extern char **environ;
diff --git a/modules/libcom/src/osi/os/iOS/osdMonotonic.c b/modules/libcom/src/osi/os/iOS/osdMonotonic.c
index dfce9dc..9599410 100644
--- a/modules/libcom/src/osi/os/iOS/osdMonotonic.c
+++ b/modules/libcom/src/osi/os/iOS/osdMonotonic.c
@@ -7,7 +7,6 @@
 #include <mach/mach.h>
 #include <mach/mach_time.h>
 
-#define epicsExportSharedSymbols
 #define EPICS_EXPOSE_LIBCOM_MONOTONIC_PRIVATE
 #include "dbDefs.h"
 #include "errlog.h"
diff --git a/modules/libcom/src/osi/os/iOS/osdSockAddrReuse.cpp b/modules/libcom/src/osi/os/iOS/osdSockAddrReuse.cpp
index 9f64e33..5554c96 100644
--- a/modules/libcom/src/osi/os/iOS/osdSockAddrReuse.cpp
+++ b/modules/libcom/src/osi/os/iOS/osdSockAddrReuse.cpp
@@ -11,11 +11,10 @@
  * Author: Jeff Hill
  */
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 #include "errlog.h"
 
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsSocketEnableAddressReuseDuringTimeWaitState ( SOCKET s )
 {
     int yes = true;
@@ -32,7 +31,7 @@ epicsShareFunc void epicsShareAPI
 /*
  * SO_REUSEPORT is not in POSIX
  */
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsSocketEnableAddressUseForDatagramFanout ( SOCKET s )
 {
     int yes = true;
diff --git a/modules/libcom/src/osi/os/iOS/osdTime.h b/modules/libcom/src/osi/os/iOS/osdTime.h
index 953ec31..fe0e634 100644
--- a/modules/libcom/src/osi/os/iOS/osdTime.h
+++ b/modules/libcom/src/osi/os/iOS/osdTime.h
@@ -17,7 +17,7 @@
 extern "C" {
 #endif /* __cplusplus */
 
-epicsShareFunc void convertDoubleToWakeTime(double timeout,
+LIBCOM_API void convertDoubleToWakeTime(double timeout,
     struct timespec *wakeTime);
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/osi/os/posix/epicsAtomicOSD.cpp b/modules/libcom/src/osi/os/posix/epicsAtomicOSD.cpp
index 1cc227f..7aa8359 100644
--- a/modules/libcom/src/osi/os/posix/epicsAtomicOSD.cpp
+++ b/modules/libcom/src/osi/os/posix/epicsAtomicOSD.cpp
@@ -15,7 +15,6 @@
 #include <unistd.h>
 #include <pthread.h>
 
-#define epicsExportSharedSymbols
 #include "epicsAssert.h"
 #include "epicsAtomic.h"
 
diff --git a/modules/libcom/src/osi/os/posix/epicsAtomicOSD.h b/modules/libcom/src/osi/os/posix/epicsAtomicOSD.h
index 892d2dc..06e8c42 100644
--- a/modules/libcom/src/osi/os/posix/epicsAtomicOSD.h
+++ b/modules/libcom/src/osi/os/posix/epicsAtomicOSD.h
@@ -16,7 +16,7 @@
 #ifndef epicsAtomicOSD_h
 #define epicsAtomicOSD_h
 
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #define EPICS_ATOMIC_OS_NAME "POSIX"
 
@@ -26,9 +26,9 @@ typedef struct EpicsAtomicLockKey {} EpicsAtomicLockKey;
 extern "C" {
 #endif /* __cplusplus */
 
-epicsShareFunc void epicsAtomicLock ( struct EpicsAtomicLockKey * );
-epicsShareFunc void epicsAtomicUnlock ( struct EpicsAtomicLockKey * );
-epicsShareFunc void epicsAtomicMemoryBarrierFallback ( void );
+LIBCOM_API void epicsAtomicLock ( struct EpicsAtomicLockKey * );
+LIBCOM_API void epicsAtomicUnlock ( struct EpicsAtomicLockKey * );
+LIBCOM_API void epicsAtomicMemoryBarrierFallback ( void );
 
 #ifndef EPICS_ATOMIC_READ_MEMORY_BARRIER
 EPICS_ATOMIC_INLINE void epicsAtomicReadMemoryBarrier (void)
diff --git a/modules/libcom/src/osi/os/posix/epicsMath.h b/modules/libcom/src/osi/os/posix/epicsMath.h
index 4e55867..38882cf 100644
--- a/modules/libcom/src/osi/os/posix/epicsMath.h
+++ b/modules/libcom/src/osi/os/posix/epicsMath.h
@@ -11,7 +11,7 @@
 #define epicsMathh
 
 #include <math.h>
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -22,8 +22,8 @@ extern "C" {
 #  define finite(x) isfinite((double)(x))
 #endif
 
-epicsShareExtern float epicsNAN;
-epicsShareExtern float epicsINF;
+LIBCOM_API extern float epicsNAN;
+LIBCOM_API extern float epicsINF;
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/os/posix/epicsTempFile.cpp b/modules/libcom/src/osi/os/posix/epicsTempFile.cpp
index c015f04..b331966 100644
--- a/modules/libcom/src/osi/os/posix/epicsTempFile.cpp
+++ b/modules/libcom/src/osi/os/posix/epicsTempFile.cpp
@@ -10,11 +10,10 @@
 
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "epicsTempFile.h"
 
 extern "C"
-epicsShareFunc FILE * epicsShareAPI epicsTempFile ( void )
+LIBCOM_API FILE * LIBCOMSTD_API epicsTempFile ( void )
 {
     return tmpfile ();
 }
diff --git a/modules/libcom/src/osi/os/posix/osdElfFindAddr.c b/modules/libcom/src/osi/os/posix/osdElfFindAddr.c
index bc67ae9..964f1d8 100644
--- a/modules/libcom/src/osi/os/posix/osdElfFindAddr.c
+++ b/modules/libcom/src/osi/os/posix/osdElfFindAddr.c
@@ -23,7 +23,6 @@
 #include <sys/mman.h>
 #endif
 
-#define epicsExportSharedSymbols
 #include "epicsMutex.h"
 #include "epicsThread.h"
 #include "epicsTime.h"
@@ -32,7 +31,7 @@
 #include "epicsStackTracePvt.h"
 
 /* This routine is provided by osiClockTime.c */
-epicsShareExtern void ClockTime_GetProgramStart(epicsTimeStamp *pDest);
+LIBCOM_API extern void ClockTime_GetProgramStart(epicsTimeStamp *pDest);
 
 #define FIND_ADDR_DEBUG 0
 
diff --git a/modules/libcom/src/osi/os/posix/osdEvent.c b/modules/libcom/src/osi/os/posix/osdEvent.c
index f133ed0..9a6a4f5 100644
--- a/modules/libcom/src/osi/os/posix/osdEvent.c
+++ b/modules/libcom/src/osi/os/posix/osdEvent.c
@@ -19,7 +19,6 @@
 #include <unistd.h>
 #include <pthread.h>
 
-#define epicsExportSharedSymbols
 #include "epicsEvent.h"
 #include "epicsTime.h"
 #include "errlog.h"
@@ -45,7 +44,7 @@ struct epicsEventOSD {
     }
 
 
-epicsShareFunc epicsEventId epicsEventCreate(epicsEventInitialState init)
+LIBCOM_API epicsEventId epicsEventCreate(epicsEventInitialState init)
 {
     epicsEventId pevent = malloc(sizeof(*pevent));
 
@@ -68,7 +67,7 @@ epicsShareFunc epicsEventId epicsEventCreate(epicsEventInitialState init)
     return NULL;
 }
 
-epicsShareFunc void epicsEventDestroy(epicsEventId pevent)
+LIBCOM_API void epicsEventDestroy(epicsEventId pevent)
 {
     int status = pthread_mutex_destroy(&pevent->mutex);
 
@@ -78,7 +77,7 @@ epicsShareFunc void epicsEventDestroy(epicsEventId pevent)
     free(pevent);
 }
 
-epicsShareFunc epicsEventStatus epicsEventTrigger(epicsEventId pevent)
+LIBCOM_API epicsEventStatus epicsEventTrigger(epicsEventId pevent)
 {
     int status = pthread_mutex_lock(&pevent->mutex);
 
@@ -93,7 +92,7 @@ epicsShareFunc epicsEventStatus epicsEventTrigger(epicsEventId pevent)
     return epicsEventOK;
 }
 
-epicsShareFunc epicsEventStatus epicsEventWait(epicsEventId pevent)
+LIBCOM_API epicsEventStatus epicsEventWait(epicsEventId pevent)
 {
     epicsEventStatus result = epicsEventOK;
     int status = pthread_mutex_lock(&pevent->mutex);
@@ -115,7 +114,7 @@ release:
     return result;
 }
 
-epicsShareFunc epicsEventStatus epicsEventWaitWithTimeout(epicsEventId pevent,
+LIBCOM_API epicsEventStatus epicsEventWaitWithTimeout(epicsEventId pevent,
     double timeout)
 {
     epicsEventStatus result = epicsEventOK;
@@ -143,12 +142,12 @@ release:
     return result;
 }
 
-epicsShareFunc epicsEventStatus epicsEventTryWait(epicsEventId id)
+LIBCOM_API epicsEventStatus epicsEventTryWait(epicsEventId id)
 {
     return epicsEventWaitWithTimeout(id, 0.0);
 }
 
-epicsShareFunc void epicsEventShow(epicsEventId pevent, unsigned int level)
+LIBCOM_API void epicsEventShow(epicsEventId pevent, unsigned int level)
 {
     printf("epicsEvent %p: %s\n", pevent,
         pevent->isFull ? "full" : "empty");
diff --git a/modules/libcom/src/osi/os/posix/osdExecinfoBackTrace.cpp b/modules/libcom/src/osi/os/posix/osdExecinfoBackTrace.cpp
index 8ed1bb2..ae32d61 100644
--- a/modules/libcom/src/osi/os/posix/osdExecinfoBackTrace.cpp
+++ b/modules/libcom/src/osi/os/posix/osdExecinfoBackTrace.cpp
@@ -23,7 +23,6 @@
 
 #endif
 
-#define epicsExportSharedSymbols
 #include "epicsStackTracePvt.h"
 
 int epicsBackTrace(void **buf, int buf_sz)
diff --git a/modules/libcom/src/osi/os/posix/osdFindSymbol.c b/modules/libcom/src/osi/os/posix/osdFindSymbol.c
index acfc405..1634462 100644
--- a/modules/libcom/src/osi/os/posix/osdFindSymbol.c
+++ b/modules/libcom/src/osi/os/posix/osdFindSymbol.c
@@ -8,20 +8,19 @@
 
 #include <dlfcn.h>
 
-#define epicsExportSharedSymbols
 #include "epicsFindSymbol.h"
 
-epicsShareFunc void * epicsLoadLibrary(const char *name)
+LIBCOM_API void * epicsLoadLibrary(const char *name)
 {
     return dlopen(name, RTLD_LAZY | RTLD_GLOBAL);
 }
 
-epicsShareFunc const char *epicsLoadError(void)
+LIBCOM_API const char *epicsLoadError(void)
 {
     return dlerror();
 }
 
-epicsShareFunc void * epicsShareAPI epicsFindSymbol(const char *name)
+LIBCOM_API void * LIBCOMSTD_API epicsFindSymbol(const char *name)
 {
     return dlsym(0, name);
 }
diff --git a/modules/libcom/src/osi/os/posix/osdMonotonic.c b/modules/libcom/src/osi/os/posix/osdMonotonic.c
index 6558579..12e0993 100644
--- a/modules/libcom/src/osi/os/posix/osdMonotonic.c
+++ b/modules/libcom/src/osi/os/posix/osdMonotonic.c
@@ -4,7 +4,6 @@
 * in file LICENSE that is included with this distribution.
 \*************************************************************************/
 
-#define epicsExportSharedSymbols
 #define EPICS_EXPOSE_LIBCOM_MONOTONIC_PRIVATE
 #include "dbDefs.h"
 #include "errlog.h"
diff --git a/modules/libcom/src/osi/os/posix/osdMutex.c b/modules/libcom/src/osi/os/posix/osdMutex.c
index d141121..43d3eac 100644
--- a/modules/libcom/src/osi/os/posix/osdMutex.c
+++ b/modules/libcom/src/osi/os/posix/osdMutex.c
@@ -20,7 +20,6 @@
 #include <unistd.h>
 #include <pthread.h>
 
-#define epicsExportSharedSymbols
 #include "epicsMutex.h"
 #include "cantProceed.h"
 #include "epicsTime.h"
diff --git a/modules/libcom/src/osi/os/posix/osdProcess.c b/modules/libcom/src/osi/os/posix/osdProcess.c
index a088714..6263823 100644
--- a/modules/libcom/src/osi/os/posix/osdProcess.c
+++ b/modules/libcom/src/osi/os/posix/osdProcess.c
@@ -26,12 +26,11 @@
 #include <sys/types.h>
 #include <pwd.h>
 
-#define epicsExportSharedSymbols
 #include "osiProcess.h"
 #include "errlog.h"
 #include "epicsAssert.h"
 
-epicsShareFunc osiGetUserNameReturn epicsShareAPI osiGetUserName (char *pBuf, unsigned bufSizeIn)
+LIBCOM_API osiGetUserNameReturn LIBCOMSTD_API osiGetUserName (char *pBuf, unsigned bufSizeIn)
 {
     struct passwd *p;
 
@@ -58,7 +57,7 @@ epicsShareFunc osiGetUserNameReturn epicsShareAPI osiGetUserName (char *pBuf, un
     }
 }
 
-epicsShareFunc osiSpawnDetachedProcessReturn epicsShareAPI osiSpawnDetachedProcess 
+LIBCOM_API osiSpawnDetachedProcessReturn LIBCOMSTD_API osiSpawnDetachedProcess 
     (const char *pProcessName, const char *pBaseExecutableName)
 {
     int status;
diff --git a/modules/libcom/src/osi/os/posix/osdSignal.cpp b/modules/libcom/src/osi/os/posix/osdSignal.cpp
index 3f8deb4..588ea3d 100644
--- a/modules/libcom/src/osi/os/posix/osdSignal.cpp
+++ b/modules/libcom/src/osi/os/posix/osdSignal.cpp
@@ -16,7 +16,6 @@
 #include <errno.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "epicsSignal.h"
 
 static void ignoreIfDefault(int signum, const char *name)
@@ -38,7 +37,7 @@ static void ignoreIfDefault(int signum, const char *name)
 /*
  * epicsSignalInstallSigHupIgnore ()
  */
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigHupIgnore (void)
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigHupIgnore (void)
 {
     ignoreIfDefault(SIGHUP, "SIGHUP");
 }
@@ -46,12 +45,12 @@ epicsShareFunc void epicsShareAPI epicsSignalInstallSigHupIgnore (void)
 /*
  * epicsSignalInstallSigPipeIgnore ()
  */
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore (void)
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigPipeIgnore (void)
 {
     ignoreIfDefault(SIGPIPE, "SIGPIPE");
 }
 
 /* Disabled */
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigAlarmIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm 
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigAlarmIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalRaiseSigAlarm 
                                   ( struct epicsThreadOSD * /* threadId */ ) {}
diff --git a/modules/libcom/src/osi/os/posix/osdSock.c b/modules/libcom/src/osi/os/posix/osdSock.c
index 9f81461..eeaa2e5 100644
--- a/modules/libcom/src/osi/os/posix/osdSock.c
+++ b/modules/libcom/src/osi/os/posix/osdSock.c
@@ -21,7 +21,6 @@
 #include <errno.h>
 #include <fcntl.h>
 
-#define epicsExportSharedSymbols
 #include "epicsThread.h"
 #include "epicsEvent.h"
 #include "epicsMutex.h"
@@ -69,7 +68,7 @@ void osiSockRelease()
  * the socket will be closed if the user uses exec()
  * as is the case with third party tools such as TCL/TK
  */
-epicsShareFunc SOCKET epicsShareAPI epicsSocketCreate ( 
+LIBCOM_API SOCKET LIBCOMSTD_API epicsSocketCreate ( 
     int domain, int type, int protocol )
 {
     SOCKET sock = socket ( domain, type, protocol );
@@ -92,7 +91,7 @@ epicsShareFunc SOCKET epicsShareAPI epicsSocketCreate (
     return sock;
 }
 
-epicsShareFunc int epicsShareAPI epicsSocketAccept ( 
+LIBCOM_API int LIBCOMSTD_API epicsSocketAccept ( 
     int sock, struct sockaddr * pAddr, osiSocklen_t * addrlen )
 {
     int newSock = accept ( sock, pAddr, addrlen );
@@ -115,7 +114,7 @@ epicsShareFunc int epicsShareAPI epicsSocketAccept (
     return newSock;
 }
 
-epicsShareFunc void epicsShareAPI epicsSocketDestroy ( SOCKET s )
+LIBCOM_API void LIBCOMSTD_API epicsSocketDestroy ( SOCKET s )
 {
     int status = close ( s );
     if ( status < 0 ) {
@@ -133,7 +132,7 @@ epicsShareFunc void epicsShareAPI epicsSocketDestroy ( SOCKET s )
  * On many systems, gethostbyaddr must be protected by a
  * mutex since the routine is not thread-safe.
  */
-epicsShareFunc unsigned epicsShareAPI ipAddrToHostName 
+LIBCOM_API unsigned LIBCOMSTD_API ipAddrToHostName 
             (const struct in_addr *pAddr, char *pBuf, unsigned bufSize)
 {
 	struct hostent *ent;
@@ -159,7 +158,7 @@ epicsShareFunc unsigned epicsShareAPI ipAddrToHostName
  * On many systems, gethostbyname must be protected by a
  * mutex since the routine is not thread-safe.
  */
-epicsShareFunc int epicsShareAPI hostToIPAddr 
+LIBCOM_API int LIBCOMSTD_API hostToIPAddr 
 				(const char *pHostName, struct in_addr *pIPA)
 {
 	struct hostent *phe;
diff --git a/modules/libcom/src/osi/os/posix/osdSockAddrReuse.cpp b/modules/libcom/src/osi/os/posix/osdSockAddrReuse.cpp
index 3a3f78e..27762c8 100644
--- a/modules/libcom/src/osi/os/posix/osdSockAddrReuse.cpp
+++ b/modules/libcom/src/osi/os/posix/osdSockAddrReuse.cpp
@@ -13,11 +13,10 @@
  * Author: Jeff Hill
  */
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 #include "errlog.h"
 
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsSocketEnableAddressReuseDuringTimeWaitState ( SOCKET s )
 {
     int yes = true;
@@ -34,7 +33,7 @@ epicsShareFunc void epicsShareAPI
 /*
  * SO_REUSEPORT is not in POSIX
  */
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsSocketEnableAddressUseForDatagramFanout ( SOCKET s )
 {
     int yes = true;
diff --git a/modules/libcom/src/osi/os/posix/osdSpin.c b/modules/libcom/src/osi/os/posix/osdSpin.c
index aa61a6c..4be3f98 100644
--- a/modules/libcom/src/osi/os/posix/osdSpin.c
+++ b/modules/libcom/src/osi/os/posix/osdSpin.c
@@ -16,7 +16,6 @@
 #include <string.h>
 #include <pthread.h>
 
-#define epicsExportSharedSymbols
 #include "errlog.h"
 #include "cantProceed.h"
 #include "epicsSpin.h"
diff --git a/modules/libcom/src/osi/os/posix/osdStdio.c b/modules/libcom/src/osi/os/posix/osdStdio.c
index 2a23cee..b8c764b 100644
--- a/modules/libcom/src/osi/os/posix/osdStdio.c
+++ b/modules/libcom/src/osi/os/posix/osdStdio.c
@@ -9,10 +9,9 @@
 \*************************************************************************/
 
 #include <osiUnistd.h>
-#define epicsExportSharedSymbols
 #include <epicsStdio.h>
 
-epicsShareFunc int epicsShareAPI epicsSnprintf(
+LIBCOM_API int LIBCOMSTD_API epicsSnprintf(
     char *str, size_t size, const char *format, ...)
 {
     int nchars;
@@ -24,7 +23,7 @@ epicsShareFunc int epicsShareAPI epicsSnprintf(
     return(nchars);
 }
 
-epicsShareFunc int epicsShareAPI epicsVsnprintf(
+LIBCOM_API int LIBCOMSTD_API epicsVsnprintf(
     char *str, size_t size, const char *format, va_list ap)
 {
     return vsnprintf ( str, size, format, ap );
diff --git a/modules/libcom/src/osi/os/posix/osdThread.c b/modules/libcom/src/osi/os/posix/osdThread.c
index a13d387..866db0d 100644
--- a/modules/libcom/src/osi/os/posix/osdThread.c
+++ b/modules/libcom/src/osi/os/posix/osdThread.c
@@ -27,7 +27,6 @@
 #include <sys/mman.h>
 #endif
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 #include "ellLib.h"
 #include "epicsEvent.h"
@@ -40,9 +39,9 @@
 #include "epicsExit.h"
 #include "epicsAtomic.h"
 
-epicsShareFunc void epicsThreadShowInfo(epicsThreadOSD *pthreadInfo, unsigned int level);
-epicsShareFunc void osdThreadHooksRun(epicsThreadId id);
-epicsShareFunc void osdThreadHooksRunMain(epicsThreadId id);
+LIBCOM_API void epicsThreadShowInfo(epicsThreadOSD *pthreadInfo, unsigned int level);
+LIBCOM_API void osdThreadHooksRun(epicsThreadId id);
+LIBCOM_API void osdThreadHooksRunMain(epicsThreadId id);
 
 static int mutexLock(pthread_mutex_t *id)
 {
@@ -113,7 +112,7 @@ if(status) { \
 }
 
 
-epicsShareFunc int epicsThreadGetPosixPriority(epicsThreadId pthreadInfo)
+LIBCOM_API int epicsThreadGetPosixPriority(epicsThreadId pthreadInfo)
 {
 #if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && _POSIX_THREAD_PRIORITY_SCHEDULING > 0
     double maxPriority,minPriority,slope,oss;
@@ -422,7 +421,7 @@ static void epicsThreadInit(void)
     checkStatusQuit(status,"pthread_once","epicsThreadInit");
 }
 
-epicsShareFunc
+LIBCOM_API
 void epicsThreadRealtimeLock(void)
 {
 #if defined(_POSIX_MEMLOCK) && _POSIX_MEMLOCK > 0
@@ -464,7 +463,7 @@ void epicsThreadRealtimeLock(void)
 #define STACK_SIZE(f) (0)
 #endif /*_POSIX_THREAD_ATTR_STACKSIZE*/
 
-epicsShareFunc unsigned int epicsShareAPI epicsThreadGetStackSize (epicsThreadStackSizeClass stackSizeClass)
+LIBCOM_API unsigned int LIBCOMSTD_API epicsThreadGetStackSize (epicsThreadStackSizeClass stackSizeClass)
 {
 #if defined (OSITHREAD_USE_DEFAULT_STACK)
     return 0;
@@ -485,7 +484,7 @@ epicsShareFunc unsigned int epicsShareAPI epicsThreadGetStackSize (epicsThreadSt
 #endif /*_POSIX_THREAD_ATTR_STACKSIZE*/
 }
 
-epicsShareFunc void epicsShareAPI epicsThreadOnce(epicsThreadOnceId *id, void (*func)(void *), void *arg)
+LIBCOM_API void LIBCOMSTD_API epicsThreadOnce(epicsThreadOnceId *id, void (*func)(void *), void *arg)
 {
     static struct epicsThreadOSD threadOnceComplete;
     #define EPICS_THREAD_ONCE_DONE &threadOnceComplete
@@ -657,7 +656,7 @@ void epicsThreadMustJoin(epicsThreadId id)
     free_threadInfo(id);
 }
 
-epicsShareFunc void epicsShareAPI epicsThreadSuspendSelf(void)
+LIBCOM_API void LIBCOMSTD_API epicsThreadSuspendSelf(void)
 {
     epicsThreadOSD *pthreadInfo;
 
@@ -669,14 +668,14 @@ epicsShareFunc void epicsShareAPI epicsThreadSuspendSelf(void)
     epicsEventWait(pthreadInfo->suspendEvent);
 }
 
-epicsShareFunc void epicsShareAPI epicsThreadResume(epicsThreadOSD *pthreadInfo)
+LIBCOM_API void LIBCOMSTD_API epicsThreadResume(epicsThreadOSD *pthreadInfo)
 {
     assert(epicsThreadOnceCalled);
     pthreadInfo->isSuspended = 0;
     epicsEventSignal(pthreadInfo->suspendEvent);
 }
 
-epicsShareFunc void epicsShareAPI epicsThreadExitMain(void)
+LIBCOM_API void LIBCOMSTD_API epicsThreadExitMain(void)
 {
     epicsThreadOSD *pthreadInfo;
 
@@ -694,19 +693,19 @@ epicsShareFunc void epicsShareAPI epicsThreadExitMain(void)
     }
 }
 
-epicsShareFunc unsigned int epicsShareAPI epicsThreadGetPriority(epicsThreadId pthreadInfo)
+LIBCOM_API unsigned int LIBCOMSTD_API epicsThreadGetPriority(epicsThreadId pthreadInfo)
 {
     assert(epicsThreadOnceCalled);
     return(pthreadInfo->osiPriority);
 }
 
-epicsShareFunc unsigned int epicsShareAPI epicsThreadGetPrioritySelf(void)
+LIBCOM_API unsigned int LIBCOMSTD_API epicsThreadGetPrioritySelf(void)
 {
     epicsThreadInit();
     return(epicsThreadGetPriority(epicsThreadGetIdSelf()));
 }
 
-epicsShareFunc void epicsShareAPI epicsThreadSetPriority(epicsThreadId pthreadInfo,unsigned int priority)
+LIBCOM_API void LIBCOMSTD_API epicsThreadSetPriority(epicsThreadId pthreadInfo,unsigned int priority)
 {
 #if defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && _POSIX_THREAD_PRIORITY_SCHEDULING > 0
     int status;
@@ -733,7 +732,7 @@ epicsShareFunc void epicsShareAPI epicsThreadSetPriority(epicsThreadId pthreadIn
 #endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
 }
 
-epicsShareFunc epicsThreadBooleanStatus epicsShareAPI epicsThreadHighestPriorityLevelBelow(
+LIBCOM_API epicsThreadBooleanStatus LIBCOMSTD_API epicsThreadHighestPriorityLevelBelow(
     unsigned int priority, unsigned *pPriorityJustBelow)
 {
     unsigned newPriority = priority - 1;
@@ -750,7 +749,7 @@ epicsShareFunc epicsThreadBooleanStatus epicsShareAPI epicsThreadHighestPriority
     return epicsThreadBooleanStatusFail;
 }
 
-epicsShareFunc epicsThreadBooleanStatus epicsShareAPI epicsThreadLowestPriorityLevelAbove(
+LIBCOM_API epicsThreadBooleanStatus LIBCOMSTD_API epicsThreadLowestPriorityLevelAbove(
     unsigned int priority, unsigned *pPriorityJustAbove)
 {
     unsigned newPriority = priority + 1;
@@ -769,7 +768,7 @@ epicsShareFunc epicsThreadBooleanStatus epicsShareAPI epicsThreadLowestPriorityL
     return epicsThreadBooleanStatusFail;
 }
 
-epicsShareFunc int epicsShareAPI epicsThreadIsEqual(epicsThreadId p1, epicsThreadId p2)
+LIBCOM_API int LIBCOMSTD_API epicsThreadIsEqual(epicsThreadId p1, epicsThreadId p2)
 {
     assert(epicsThreadOnceCalled);
     assert(p1);
@@ -777,13 +776,13 @@ epicsShareFunc int epicsShareAPI epicsThreadIsEqual(epicsThreadId p1, epicsThrea
     return(pthread_equal(p1->tid,p2->tid));
 }
 
-epicsShareFunc int epicsShareAPI epicsThreadIsSuspended(epicsThreadId pthreadInfo) {
+LIBCOM_API int LIBCOMSTD_API epicsThreadIsSuspended(epicsThreadId pthreadInfo) {
     assert(epicsThreadOnceCalled);
     assert(pthreadInfo);
     return(pthreadInfo->isSuspended ? 1 : 0);
 }
 
-epicsShareFunc void epicsShareAPI epicsThreadSleep(double seconds)
+LIBCOM_API void LIBCOMSTD_API epicsThreadSleep(double seconds)
 {
     struct timespec delayTime;
     struct timespec remainingTime;
@@ -803,7 +802,7 @@ epicsShareFunc void epicsShareAPI epicsThreadSleep(double seconds)
         delayTime = remainingTime;
 }
 
-epicsShareFunc epicsThreadId epicsShareAPI epicsThreadGetIdSelf(void) {
+LIBCOM_API epicsThreadId LIBCOMSTD_API epicsThreadGetIdSelf(void) {
     epicsThreadOSD *pthreadInfo;
 
     epicsThreadInit();
@@ -814,12 +813,12 @@ epicsShareFunc epicsThreadId epicsShareAPI epicsThreadGetIdSelf(void) {
     return(pthreadInfo);
 }
 
-epicsShareFunc pthread_t epicsThreadGetPosixThreadId ( epicsThreadId threadId )
+LIBCOM_API pthread_t epicsThreadGetPosixThreadId ( epicsThreadId threadId )
 {
     return threadId->tid;
 }
 
-epicsShareFunc epicsThreadId epicsShareAPI epicsThreadGetId(const char *name) {
+LIBCOM_API epicsThreadId LIBCOMSTD_API epicsThreadGetId(const char *name) {
     epicsThreadOSD *pthreadInfo;
     int status;
 
@@ -839,7 +838,7 @@ epicsShareFunc epicsThreadId epicsShareAPI epicsThreadGetId(const char *name) {
     return(pthreadInfo);
 }
 
-epicsShareFunc const char epicsShareAPI *epicsThreadGetNameSelf()
+LIBCOM_API const char LIBCOMSTD_API *epicsThreadGetNameSelf()
 {
     epicsThreadOSD *pthreadInfo;
 
@@ -850,14 +849,14 @@ epicsShareFunc const char epicsShareAPI *epicsThreadGetNameSelf()
     return(pthreadInfo->name);
 }
 
-epicsShareFunc void epicsShareAPI epicsThreadGetName(epicsThreadId pthreadInfo, char *name, size_t size)
+LIBCOM_API void LIBCOMSTD_API epicsThreadGetName(epicsThreadId pthreadInfo, char *name, size_t size)
 {
     assert(epicsThreadOnceCalled);
     strncpy(name, pthreadInfo->name, size-1);
     name[size-1] = '\0';
 }
 
-epicsShareFunc void epicsThreadMap(EPICS_THREAD_HOOK_ROUTINE func)
+LIBCOM_API void epicsThreadMap(EPICS_THREAD_HOOK_ROUTINE func)
 {
     epicsThreadOSD *pthreadInfo;
     int status;
@@ -876,7 +875,7 @@ epicsShareFunc void epicsThreadMap(EPICS_THREAD_HOOK_ROUTINE func)
     checkStatus(status, "pthread_mutex_unlock epicsThreadMap");
 }
 
-epicsShareFunc void epicsShareAPI epicsThreadShowAll(unsigned int level)
+LIBCOM_API void LIBCOMSTD_API epicsThreadShowAll(unsigned int level)
 {
     epicsThreadOSD *pthreadInfo;
     int status;
@@ -896,7 +895,7 @@ epicsShareFunc void epicsShareAPI epicsThreadShowAll(unsigned int level)
     checkStatus(status,"pthread_mutex_unlock epicsThreadShowAll");
 }
 
-epicsShareFunc void epicsShareAPI epicsThreadShow(epicsThreadId showThread, unsigned int level)
+LIBCOM_API void LIBCOMSTD_API epicsThreadShow(epicsThreadId showThread, unsigned int level)
 {
     epicsThreadOSD *pthreadInfo;
     int status;
@@ -927,7 +926,7 @@ epicsShareFunc void epicsShareAPI epicsThreadShow(epicsThreadId showThread, unsi
         printf("Thread %#lx (%lu) not found.\n", (unsigned long)showThread, (unsigned long)showThread);
 }
 
-epicsShareFunc epicsThreadPrivateId epicsShareAPI epicsThreadPrivateCreate(void)
+LIBCOM_API epicsThreadPrivateId LIBCOMSTD_API epicsThreadPrivateCreate(void)
 {
     pthread_key_t *key;
     int status;
@@ -943,7 +942,7 @@ epicsShareFunc epicsThreadPrivateId epicsShareAPI epicsThreadPrivateCreate(void)
     return((epicsThreadPrivateId)key);
 }
 
-epicsShareFunc void epicsShareAPI epicsThreadPrivateDelete(epicsThreadPrivateId id)
+LIBCOM_API void LIBCOMSTD_API epicsThreadPrivateDelete(epicsThreadPrivateId id)
 {
     pthread_key_t *key = (pthread_key_t *)id;
     int status;
@@ -954,7 +953,7 @@ epicsShareFunc void epicsShareAPI epicsThreadPrivateDelete(epicsThreadPrivateId 
     free((void *)key);
 }
 
-epicsShareFunc void epicsShareAPI epicsThreadPrivateSet (epicsThreadPrivateId id, void *value)
+LIBCOM_API void LIBCOMSTD_API epicsThreadPrivateSet (epicsThreadPrivateId id, void *value)
 {
     pthread_key_t *key = (pthread_key_t *)id;
     int status;
@@ -966,7 +965,7 @@ epicsShareFunc void epicsShareAPI epicsThreadPrivateSet (epicsThreadPrivateId id
     checkStatusQuit(status,"pthread_setspecific","epicsThreadPrivateSet");
 }
 
-epicsShareFunc void epicsShareAPI *epicsThreadPrivateGet(epicsThreadPrivateId id)
+LIBCOM_API void LIBCOMSTD_API *epicsThreadPrivateGet(epicsThreadPrivateId id)
 {
     pthread_key_t *key = (pthread_key_t *)id;
 
@@ -974,7 +973,7 @@ epicsShareFunc void epicsShareAPI *epicsThreadPrivateGet(epicsThreadPrivateId id
     return pthread_getspecific(*key);
 }
 
-epicsShareFunc double epicsShareAPI epicsThreadSleepQuantum ()
+LIBCOM_API double LIBCOMSTD_API epicsThreadSleepQuantum ()
 {
     double hz;
     hz = sysconf ( _SC_CLK_TCK );
@@ -983,7 +982,7 @@ epicsShareFunc double epicsShareAPI epicsThreadSleepQuantum ()
     return 1.0 / hz;
 }
 
-epicsShareFunc int epicsThreadGetCPUs(void)
+LIBCOM_API int epicsThreadGetCPUs(void)
 {
     long ret;
 #ifdef _SC_NPROCESSORS_ONLN
diff --git a/modules/libcom/src/osi/os/posix/osdThread.h b/modules/libcom/src/osi/os/posix/osdThread.h
index 8fe8f14..85a77cd 100644
--- a/modules/libcom/src/osi/os/posix/osdThread.h
+++ b/modules/libcom/src/osi/os/posix/osdThread.h
@@ -11,7 +11,7 @@
 
 #include <pthread.h>
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "ellLib.h"
 #include "epicsEvent.h"
 
@@ -38,8 +38,8 @@ typedef struct epicsThreadOSD {
     char               name[1];     /* actually larger */
 } epicsThreadOSD;
 
-epicsShareFunc pthread_t epicsThreadGetPosixThreadId(epicsThreadId id);
-epicsShareFunc int epicsThreadGetPosixPriority(epicsThreadId id);
+LIBCOM_API pthread_t epicsThreadGetPosixThreadId(epicsThreadId id);
+LIBCOM_API int epicsThreadGetPosixPriority(epicsThreadId id);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/os/posix/osdThreadExtra.c b/modules/libcom/src/osi/os/posix/osdThreadExtra.c
index af622dc..7f2854b 100644
--- a/modules/libcom/src/osi/os/posix/osdThreadExtra.c
+++ b/modules/libcom/src/osi/os/posix/osdThreadExtra.c
@@ -11,14 +11,13 @@
 
 /* This is part of the posix implementation of epicsThread */
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 #include "ellLib.h"
 #include "epicsEvent.h"
 #include "epicsThread.h"
 
-epicsShareDef EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault;
-epicsShareDef EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain;
+EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault;
+EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain;
 
 void epicsThreadShowInfo(epicsThreadOSD *pthreadInfo, unsigned int level)
 {
diff --git a/modules/libcom/src/osi/os/posix/osdTime.cpp b/modules/libcom/src/osi/os/posix/osdTime.cpp
index cc3cb19..32b3c5b 100644
--- a/modules/libcom/src/osi/os/posix/osdTime.cpp
+++ b/modules/libcom/src/osi/os/posix/osdTime.cpp
@@ -16,7 +16,6 @@
 #define EPICS_EXPOSE_LIBCOM_MONOTONIC_PRIVATE
 #include "osiSock.h"
 
-#define epicsExportSharedSymbols
 #include "cantProceed.h"
 #include "epicsTime.h"
 #include "generalTimeSup.h"
@@ -88,7 +87,7 @@ int epicsTime_localtime ( const time_t *clock,
     }
 }
 
-extern "C" epicsShareFunc void
+extern "C" LIBCOM_API void
     convertDoubleToWakeTime(double timeout,struct timespec *wakeTime)
 {
     struct timespec now, wait;
diff --git a/modules/libcom/src/osi/os/posix/osdTime.h b/modules/libcom/src/osi/os/posix/osdTime.h
index d1da776..b2095d7 100644
--- a/modules/libcom/src/osi/os/posix/osdTime.h
+++ b/modules/libcom/src/osi/os/posix/osdTime.h
@@ -28,7 +28,7 @@
 extern "C" {
 #endif /* __cplusplus */
 
-epicsShareFunc void epicsShareAPI
+LIBCOM_API void LIBCOMSTD_API
     convertDoubleToWakeTime(double timeout,struct timespec *wakeTime);
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/osi/os/posix/systemCallIntMech.cpp b/modules/libcom/src/osi/os/posix/systemCallIntMech.cpp
index cdac1d0..ea0a341 100644
--- a/modules/libcom/src/osi/os/posix/systemCallIntMech.cpp
+++ b/modules/libcom/src/osi/os/posix/systemCallIntMech.cpp
@@ -12,7 +12,6 @@
  *      Author:		Jeff Hill 
  */
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 
 enum epicsSocketSystemCallInterruptMechanismQueryInfo 
diff --git a/modules/libcom/src/osi/os/solaris/epicsAtomicOSD.h b/modules/libcom/src/osi/os/solaris/epicsAtomicOSD.h
index 1fa23bd..c6ecfa8 100644
--- a/modules/libcom/src/osi/os/solaris/epicsAtomicOSD.h
+++ b/modules/libcom/src/osi/os/solaris/epicsAtomicOSD.h
@@ -13,7 +13,7 @@
  *  [email protected]
  */
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifndef epicsAtomicOSD_h
 #define epicsAtomicOSD_h
@@ -172,8 +172,8 @@ typedef struct EpicsAtomicLockKey {
 extern "C" {
 #endif /* __cplusplus */
 
-epicsShareFunc void epicsAtomicLock ( struct EpicsAtomicLockKey * );
-epicsShareFunc void epicsAtomicUnlock ( struct EpicsAtomicLockKey * );
+LIBCOM_API void epicsAtomicLock ( struct EpicsAtomicLockKey * );
+LIBCOM_API void epicsAtomicUnlock ( struct EpicsAtomicLockKey * );
 
 #ifdef __cplusplus
 } /* end of extern "C" */
diff --git a/modules/libcom/src/osi/os/solaris/epicsMath.h b/modules/libcom/src/osi/os/solaris/epicsMath.h
index 87d4986..c27484d 100644
--- a/modules/libcom/src/osi/os/solaris/epicsMath.h
+++ b/modules/libcom/src/osi/os/solaris/epicsMath.h
@@ -10,7 +10,7 @@
 
 #include <math.h>
 #include <ieeefp.h>
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #ifndef isinf
 #  define isinf(x) (((x)==(x)) && !finite((x)))
@@ -25,8 +25,8 @@
 extern "C" {
 #endif
 
-epicsShareExtern float epicsNAN;
-epicsShareExtern float epicsINF;
+LIBCOM_API extern float epicsNAN;
+LIBCOM_API extern float epicsINF;
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/os/solaris/osdBackTrace.cpp b/modules/libcom/src/osi/os/solaris/osdBackTrace.cpp
index 55d5e36..46c4784 100644
--- a/modules/libcom/src/osi/os/solaris/osdBackTrace.cpp
+++ b/modules/libcom/src/osi/os/solaris/osdBackTrace.cpp
@@ -9,7 +9,6 @@
 
 #include <ucontext.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStackTracePvt.h"
 
 struct wlk {
diff --git a/modules/libcom/src/osi/os/solaris/osdEnv.c b/modules/libcom/src/osi/os/solaris/osdEnv.c
index c356a0a..1901d9e 100644
--- a/modules/libcom/src/osi/os/solaris/osdEnv.c
+++ b/modules/libcom/src/osi/os/solaris/osdEnv.c
@@ -15,7 +15,6 @@
 #include <stdlib.h>
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "epicsStdio.h"
 #include "envDefs.h"
 #include "osiUnistd.h"
@@ -24,7 +23,7 @@
 /*
  * Set the value of an environment variable
  */
-epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *value)
+LIBCOM_API void LIBCOMSTD_API epicsEnvSet (const char *name, const char *value)
 {
     iocshEnvClear(name);
     setenv(name, value, 1);
@@ -34,7 +33,7 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val
  * Unset an environment variable
  */
 
-epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvUnset (const char *name)
 {
     iocshEnvClear(name);
     unsetenv(name);
@@ -43,7 +42,7 @@ epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
 /*
  * Show the value of the specified, or all, environment variables
  */
-epicsShareFunc void epicsShareAPI epicsEnvShow (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvShow (const char *name)
 {
     if (name == NULL) {
         extern char **environ;
diff --git a/modules/libcom/src/osi/os/solaris/osdStrtod.h b/modules/libcom/src/osi/os/solaris/osdStrtod.h
index b5fda31..395cacd 100644
--- a/modules/libcom/src/osi/os/solaris/osdStrtod.h
+++ b/modules/libcom/src/osi/os/solaris/osdStrtod.h
@@ -16,7 +16,7 @@ extern "C" {
 /*
  * epicsStrtod() for systems with broken strtod() routine
  */
-epicsShareFunc double epicsStrtod(const char *str, char **endp); 
+LIBCOM_API double epicsStrtod(const char *str, char **endp); 
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/os/solaris/osdgetexec.c b/modules/libcom/src/osi/os/solaris/osdgetexec.c
index ff9739c..4d55694 100644
--- a/modules/libcom/src/osi/os/solaris/osdgetexec.c
+++ b/modules/libcom/src/osi/os/solaris/osdgetexec.c
@@ -2,7 +2,6 @@
 #include <string.h>
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include <osiFileName.h>
 
 char *epicsGetExecName(void)
diff --git a/modules/libcom/src/osi/os/vxWorks/epicsMath.h b/modules/libcom/src/osi/os/vxWorks/epicsMath.h
index e973d2d..0939f3d 100644
--- a/modules/libcom/src/osi/os/vxWorks/epicsMath.h
+++ b/modules/libcom/src/osi/os/vxWorks/epicsMath.h
@@ -12,7 +12,7 @@
 
 #include <math.h>
 #include <private/mathP.h>
-#include <shareLib.h>
+#include <libComAPI.h>
 
 /* private/mathP.h defines NAN as 4, and uses its value in the
  * isNan() macro.  We need mathP.h for isInf(), but can create
@@ -29,8 +29,8 @@
 extern "C" {
 #endif
 
-epicsShareExtern float epicsNAN;
-epicsShareExtern float epicsINF;
+LIBCOM_API extern float epicsNAN;
+LIBCOM_API extern float epicsINF;
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/os/vxWorks/osdEnv.c b/modules/libcom/src/osi/os/vxWorks/osdEnv.c
index 9cfd1f7..b97ec52 100644
--- a/modules/libcom/src/osi/os/vxWorks/osdEnv.c
+++ b/modules/libcom/src/osi/os/vxWorks/osdEnv.c
@@ -21,7 +21,6 @@
 #include <ctype.h>
 #include <envLib.h>
 
-#define epicsExportSharedSymbols
 #include "cantProceed.h"
 #include "epicsFindSymbol.h"
 #include "epicsStdio.h"
@@ -33,7 +32,7 @@
  * Leaks memory, but the assumption is that this routine won't be
  * called often enough for the leak to be a problem.
  */
-epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *value)
+LIBCOM_API void LIBCOMSTD_API epicsEnvSet (const char *name, const char *value)
 {
     char *cp;
 
@@ -62,7 +61,7 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val
  * support to really unset an environment variable.
  */
 
-epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvUnset (const char *name)
 {
     char* var;
 
@@ -78,7 +77,7 @@ epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name)
 /*
  * Show the value of the specified, or all, environment variables
  */
-epicsShareFunc void epicsShareAPI epicsEnvShow (const char *name)
+LIBCOM_API void LIBCOMSTD_API epicsEnvShow (const char *name)
 {
     if (name == NULL) {
         envShow (0);
diff --git a/modules/libcom/src/osi/os/vxWorks/osdFindSymbol.c b/modules/libcom/src/osi/os/vxWorks/osdFindSymbol.c
index da17c5b..2923743 100644
--- a/modules/libcom/src/osi/os/vxWorks/osdFindSymbol.c
+++ b/modules/libcom/src/osi/os/vxWorks/osdFindSymbol.c
@@ -28,7 +28,7 @@
 static char *errmsg = NULL;
 static char *oldmsg = NULL;
 
-epicsShareFunc void * epicsLoadLibrary(const char *name)
+LIBCOM_API void * epicsLoadLibrary(const char *name)
 {
     MODULE_ID m = 0;
     int fd;
@@ -54,7 +54,7 @@ epicsShareFunc void * epicsLoadLibrary(const char *name)
     return m;
 }
 
-epicsShareFunc const char *epicsLoadError(void)
+LIBCOM_API const char *epicsLoadError(void)
 {
     if (oldmsg)
         free(oldmsg);
diff --git a/modules/libcom/src/osi/os/vxWorks/osdMessageQueue.cpp b/modules/libcom/src/osi/os/vxWorks/osdMessageQueue.cpp
index 89c2745..1299156 100644
--- a/modules/libcom/src/osi/os/vxWorks/osdMessageQueue.cpp
+++ b/modules/libcom/src/osi/os/vxWorks/osdMessageQueue.cpp
@@ -13,13 +13,12 @@
  *              630 252 4793
  */
 
-#define epicsExportSharedSymbols
 #include <limits.h>
 #include "epicsMessageQueue.h"
 
 extern "C" int sysClkRateGet(void);
 
-epicsShareFunc int epicsShareAPI epicsMessageQueueSendWithTimeout(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueSendWithTimeout(
     epicsMessageQueueId id,
     void *message,
     unsigned int messageSize,
@@ -36,7 +35,7 @@ epicsShareFunc int epicsShareAPI epicsMessageQueueSendWithTimeout(
     return msgQSend((MSG_Q_ID)id, (char *)message, messageSize, ticks, MSG_PRI_NORMAL);
 }
 
-epicsShareFunc int epicsShareAPI epicsMessageQueueReceiveWithTimeout(
+LIBCOM_API int LIBCOMSTD_API epicsMessageQueueReceiveWithTimeout(
     epicsMessageQueueId id,
     void *message,
     unsigned int size,
diff --git a/modules/libcom/src/osi/os/vxWorks/osdPoolStatus.c b/modules/libcom/src/osi/os/vxWorks/osdPoolStatus.c
index 06447c1..238c814 100644
--- a/modules/libcom/src/osi/os/vxWorks/osdPoolStatus.c
+++ b/modules/libcom/src/osi/os/vxWorks/osdPoolStatus.c
@@ -10,7 +10,6 @@
 #include <memLib.h>
 #include <limits.h>
 
-#define epicsExportSharedSymbols
 #include "epicsThread.h"
 #include "osiPoolStatus.h"
 
@@ -55,7 +54,7 @@ static void osdSufficentSpaceInPoolInit ( void *pArgIn )
 /*
  * osiSufficentSpaceInPool () 
  */
-epicsShareFunc int epicsShareAPI osiSufficentSpaceInPool ( size_t contiguousBlockSize )
+LIBCOM_API int LIBCOMSTD_API osiSufficentSpaceInPool ( size_t contiguousBlockSize )
 {
     epicsThreadOnce ( &osdMaxBlockOnceler, osdSufficentSpaceInPoolInit, 0 );
 
diff --git a/modules/libcom/src/osi/os/vxWorks/osdProcess.c b/modules/libcom/src/osi/os/vxWorks/osdProcess.c
index 2347a40..865eb31 100644
--- a/modules/libcom/src/osi/os/vxWorks/osdProcess.c
+++ b/modules/libcom/src/osi/os/vxWorks/osdProcess.c
@@ -22,11 +22,10 @@
 
 #include <remLib.h>
 
-#define epicsExportSharedSymbols
 #include "osiProcess.h"
 #include "errlog.h"
 
-epicsShareFunc osiGetUserNameReturn epicsShareAPI osiGetUserName (char *pBuf, unsigned bufSizeIn)
+LIBCOM_API osiGetUserNameReturn LIBCOMSTD_API osiGetUserName (char *pBuf, unsigned bufSizeIn)
 {
 	char pName[MAX_IDENTITY_LEN];
     unsigned uiLength;
@@ -49,7 +48,7 @@ epicsShareFunc osiGetUserNameReturn epicsShareAPI osiGetUserName (char *pBuf, un
     return osiGetUserNameSuccess;
 }
 
-epicsShareFunc osiSpawnDetachedProcessReturn epicsShareAPI osiSpawnDetachedProcess
+LIBCOM_API osiSpawnDetachedProcessReturn LIBCOMSTD_API osiSpawnDetachedProcess
     (const char *pProcessName, const char *pBaseExecutableName)
 {
     return osiSpawnDetachedProcessNoSupport;
diff --git a/modules/libcom/src/osi/os/vxWorks/osdSignal.cpp b/modules/libcom/src/osi/os/vxWorks/osdSignal.cpp
index 1157854..5fb6b1c 100644
--- a/modules/libcom/src/osi/os/vxWorks/osdSignal.cpp
+++ b/modules/libcom/src/osi/os/vxWorks/osdSignal.cpp
@@ -8,13 +8,12 @@
  * in file LICENSE that is included with this distribution. 
 \*************************************************************************/
 
-#define epicsExportSharedSymbols
 #include "epicsSignal.h"
 
 /*
  * NOOP
  */
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigHupIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalInstallSigAlarmIgnore ( void ) {}
-epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * /* threadId */ ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigHupIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigPipeIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalInstallSigAlarmIgnore ( void ) {}
+LIBCOM_API void LIBCOMSTD_API epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * /* threadId */ ) {}
diff --git a/modules/libcom/src/osi/os/vxWorks/osdSock.c b/modules/libcom/src/osi/os/vxWorks/osdSock.c
index a0f5e8e..fe54a23 100644
--- a/modules/libcom/src/osi/os/vxWorks/osdSock.c
+++ b/modules/libcom/src/osi/os/vxWorks/osdSock.c
@@ -22,7 +22,6 @@
 
 #include "errlog.h"
 
-#define epicsExportSharedSymbols
 #include "osiSock.h"
 
 int osiSockAttach()
@@ -34,7 +33,7 @@ void osiSockRelease()
 {
 }
 
-epicsShareFunc SOCKET epicsShareAPI epicsSocketCreate ( 
+LIBCOM_API SOCKET LIBCOMSTD_API epicsSocketCreate ( 
     int domain, int type, int protocol )
 {
     SOCKET sock = socket ( domain, type, protocol );
@@ -44,7 +43,7 @@ epicsShareFunc SOCKET epicsShareAPI epicsSocketCreate (
     return sock;
 }
 
-epicsShareFunc int epicsShareAPI epicsSocketAccept ( 
+LIBCOM_API int LIBCOMSTD_API epicsSocketAccept ( 
     int sock, struct sockaddr * pAddr, osiSocklen_t * addrlen )
 {
     int newSock = accept ( sock, pAddr, addrlen );
@@ -54,7 +53,7 @@ epicsShareFunc int epicsShareAPI epicsSocketAccept (
     return newSock;
 }
 
-epicsShareFunc void epicsShareAPI epicsSocketDestroy ( SOCKET s )
+LIBCOM_API void LIBCOMSTD_API epicsSocketDestroy ( SOCKET s )
 {
     int status = close ( s );
     if ( status < 0 ) {
@@ -70,7 +69,7 @@ epicsShareFunc void epicsShareAPI epicsSocketDestroy ( SOCKET s )
 /*
  * ipAddrToHostName
  */
-epicsShareFunc unsigned epicsShareAPI ipAddrToHostName 
+LIBCOM_API unsigned LIBCOMSTD_API ipAddrToHostName 
             (const struct in_addr *pAddr, char *pBuf, unsigned bufSize)
 {
 	int				status;
@@ -112,7 +111,7 @@ epicsShareFunc unsigned epicsShareAPI ipAddrToHostName
 /*
  * hostToIPAddr ()
  */
-epicsShareFunc int epicsShareAPI
+LIBCOM_API int LIBCOMSTD_API
 hostToIPAddr(const char *pHostName, struct in_addr *pIPA)
 {
     int addr = hostGetByName ( (char *) pHostName );
diff --git a/modules/libcom/src/osi/os/vxWorks/osdThread.c b/modules/libcom/src/osi/os/vxWorks/osdThread.c
index 0ed3138..7a57f3c 100644
--- a/modules/libcom/src/osi/os/vxWorks/osdThread.c
+++ b/modules/libcom/src/osi/os/vxWorks/osdThread.c
@@ -50,7 +50,7 @@
 #endif
 
 
-epicsShareFunc void osdThreadHooksRun(epicsThreadId id);
+LIBCOM_API void osdThreadHooksRun(epicsThreadId id);
 
 #if CPU_FAMILY == MC680X0
 #define ARCH_STACK_FACTOR 1
@@ -467,7 +467,7 @@ void epicsThreadGetName (epicsThreadId id, char *name, size_t size)
     name[size-1] = '\0';
 }
 
-epicsShareFunc void epicsThreadMap ( EPICS_THREAD_HOOK_ROUTINE func )
+LIBCOM_API void epicsThreadMap ( EPICS_THREAD_HOOK_ROUTINE func )
 {
     int noTasks = 0;
     int i;
@@ -581,7 +581,7 @@ double epicsThreadSleepQuantum ()
     return 1.0 / HZ;
 }
 
-epicsShareFunc int epicsThreadGetCPUs(void)
+LIBCOM_API int epicsThreadGetCPUs(void)
 {
     return 1;
 }
diff --git a/modules/libcom/src/osi/os/vxWorks/osdThreadExtra.c b/modules/libcom/src/osi/os/vxWorks/osdThreadExtra.c
index 0a7c7ae..f456280 100644
--- a/modules/libcom/src/osi/os/vxWorks/osdThreadExtra.c
+++ b/modules/libcom/src/osi/os/vxWorks/osdThreadExtra.c
@@ -9,8 +9,7 @@
 
 /* Null default thread hooks for all platforms that do not do anything special */
 
-#define epicsExportSharedSymbols
 #include "epicsThread.h"
 
-epicsShareDef EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault;
-epicsShareDef EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain;
+EPICS_THREAD_HOOK_ROUTINE epicsThreadHookDefault;
+EPICS_THREAD_HOOK_ROUTINE epicsThreadHookMain;
diff --git a/modules/libcom/src/osi/osiClockTime.c b/modules/libcom/src/osi/osiClockTime.c
index c591d38..0b519c4 100644
--- a/modules/libcom/src/osi/osiClockTime.c
+++ b/modules/libcom/src/osi/osiClockTime.c
@@ -10,7 +10,6 @@
 #include <stdio.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "epicsEvent.h"
 #include "epicsExit.h"
 #include "epicsMutex.h"
diff --git a/modules/libcom/src/osi/osiNTPTime.c b/modules/libcom/src/osi/osiNTPTime.c
index d22df86..3283040 100644
--- a/modules/libcom/src/osi/osiNTPTime.c
+++ b/modules/libcom/src/osi/osiNTPTime.c
@@ -18,7 +18,6 @@
 #include <time.h>
 #include <errno.h>
 
-#define epicsExportSharedSymbols
 #include "epicsEvent.h"
 #include "epicsExit.h"
 #include "epicsTypes.h"
diff --git a/modules/libcom/src/osi/osiPoolStatus.h b/modules/libcom/src/osi/osiPoolStatus.h
index b0207f1..b112d27 100644
--- a/modules/libcom/src/osi/osiPoolStatus.h
+++ b/modules/libcom/src/osi/osiPoolStatus.h
@@ -18,7 +18,7 @@
  */
 
 #include <stdlib.h>
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -31,7 +31,7 @@ extern "C" {
  *
  * this routine is called quite frequently so an efficent implementation is important
  */
-epicsShareFunc int epicsShareAPI osiSufficentSpaceInPool ( size_t contiguousBlockSize );
+LIBCOM_API int LIBCOMSTD_API osiSufficentSpaceInPool ( size_t contiguousBlockSize );
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/osi/osiProcess.h b/modules/libcom/src/osi/osiProcess.h
index eabff1e..9763616 100644
--- a/modules/libcom/src/osi/osiProcess.h
+++ b/modules/libcom/src/osi/osiProcess.h
@@ -16,7 +16,7 @@
  * Author: Jeff Hill
  *
  */
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -25,7 +25,7 @@ extern "C" {
 typedef enum osiGetUserNameReturn {
                 osiGetUserNameFail, 
                 osiGetUserNameSuccess} osiGetUserNameReturn;
-epicsShareFunc osiGetUserNameReturn epicsShareAPI osiGetUserName (char *pBuf, unsigned bufSize);
+LIBCOM_API osiGetUserNameReturn LIBCOMSTD_API osiGetUserName (char *pBuf, unsigned bufSize);
 
 /*
  * Spawn detached process with named executable, but return 
@@ -37,7 +37,7 @@ typedef enum osiSpawnDetachedProcessReturn {
                 osiSpawnDetachedProcessSuccess,
                 osiSpawnDetachedProcessNoSupport} osiSpawnDetachedProcessReturn;
 
-epicsShareFunc osiSpawnDetachedProcessReturn epicsShareAPI osiSpawnDetachedProcess 
+LIBCOM_API osiSpawnDetachedProcessReturn LIBCOMSTD_API osiSpawnDetachedProcess 
     (const char *pProcessName, const char *pBaseExecutableName);
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/osi/osiSock.c b/modules/libcom/src/osi/osiSock.c
index 8b4634c..b3b548f 100644
--- a/modules/libcom/src/osi/osiSock.c
+++ b/modules/libcom/src/osi/osiSock.c
@@ -17,7 +17,6 @@
 #include <stdio.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "epicsAssert.h"
 #include "epicsSignal.h"
 #include "epicsStdio.h"
@@ -32,7 +31,7 @@
  * sockAddrAreIdentical() 
  * (returns true if addresses are identical)
  */
-int epicsShareAPI sockAddrAreIdentical 
+int LIBCOMSTD_API sockAddrAreIdentical 
 			( const osiSockAddr *plhs, const osiSockAddr *prhs )
 {
     int match;
@@ -59,7 +58,7 @@ int epicsShareAPI sockAddrAreIdentical
  * sockAddrToA() 
  * (convert socket address to ASCII host name)
  */
-unsigned epicsShareAPI sockAddrToA ( 
+unsigned LIBCOMSTD_API sockAddrToA ( 
     const struct sockaddr * paddr, char * pBuf, unsigned bufSize )
 {
 	if ( bufSize < 1 ) {
@@ -90,7 +89,7 @@ unsigned epicsShareAPI sockAddrToA (
  * ipAddrToA() 
  * (convert IP address to ASCII host name)
  */
-unsigned epicsShareAPI ipAddrToA ( 
+unsigned LIBCOMSTD_API ipAddrToA ( 
     const struct sockaddr_in * paddr, char * pBuf, unsigned bufSize )
 {
 	unsigned len = ipAddrToHostName ( 
@@ -116,7 +115,7 @@ unsigned epicsShareAPI ipAddrToA (
 /*
  * sockAddrToDottedIP () 
  */
-unsigned epicsShareAPI sockAddrToDottedIP ( 
+unsigned LIBCOMSTD_API sockAddrToDottedIP ( 
     const struct sockaddr * paddr, char * pBuf, unsigned bufSize )
 {
 	if ( paddr->sa_family != AF_INET ) {
@@ -142,7 +141,7 @@ unsigned epicsShareAPI sockAddrToDottedIP (
 /*
  * ipAddrToDottedIP () 
  */
-unsigned epicsShareAPI ipAddrToDottedIP ( 
+unsigned LIBCOMSTD_API ipAddrToDottedIP ( 
     const struct sockaddr_in *paddr, char *pBuf, unsigned bufSize )
 {
     static const char * pErrStr = "<IPA>";
diff --git a/modules/libcom/src/osi/osiSock.h b/modules/libcom/src/osi/osiSock.h
index 6e3b053..e500b8e 100644
--- a/modules/libcom/src/osi/osiSock.h
+++ b/modules/libcom/src/osi/osiSock.h
@@ -15,7 +15,7 @@
 #ifndef osiSockh
 #define osiSockh
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "osdSock.h"
 #include "ellLib.h"
 
@@ -27,15 +27,15 @@ struct sockaddr;
 struct sockaddr_in;
 struct in_addr;
 
-epicsShareFunc SOCKET epicsShareAPI epicsSocketCreate ( 
+LIBCOM_API SOCKET LIBCOMSTD_API epicsSocketCreate ( 
     int domain, int type, int protocol );
-epicsShareFunc int epicsShareAPI epicsSocketAccept ( 
+LIBCOM_API int LIBCOMSTD_API epicsSocketAccept ( 
     int sock, struct sockaddr * pAddr, osiSocklen_t * addrlen );
-epicsShareFunc void epicsShareAPI epicsSocketDestroy ( 
+LIBCOM_API void LIBCOMSTD_API epicsSocketDestroy ( 
     SOCKET );
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsSocketEnableAddressReuseDuringTimeWaitState ( SOCKET s );
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsSocketEnableAddressUseForDatagramFanout ( SOCKET s );
 
 /*
@@ -49,7 +49,7 @@ enum epicsSocketSystemCallInterruptMechanismQueryInfo {
     esscimqi_socketBothShutdownRequired,
     esscimqi_socketSigAlarmRequired /* NO LONGER USED/SUPPORTED */
 };
-epicsShareFunc enum epicsSocketSystemCallInterruptMechanismQueryInfo 
+LIBCOM_API enum epicsSocketSystemCallInterruptMechanismQueryInfo 
         epicsSocketSystemCallInterruptMechanismQuery ();
 
 #ifdef EPICS_PRIVATE_API
@@ -58,7 +58,7 @@ epicsShareFunc enum epicsSocketSystemCallInterruptMechanismQueryInfo
  * of unsent data in the output queue.
  * Returns -1 if the information is not available.
  */
-epicsShareFunc int epicsSocketUnsentCount(SOCKET sock);
+LIBCOM_API int epicsSocketUnsentCount(SOCKET sock);
 #endif
 
 /*
@@ -72,7 +72,7 @@ epicsShareFunc int epicsSocketUnsentCount(SOCKET sock);
  * including the null termination, but always writes at least a
  * null ternminater in the string (if bufSize >= 1)
  */
-epicsShareFunc unsigned epicsShareAPI sockAddrToA (
+LIBCOM_API unsigned LIBCOMSTD_API sockAddrToA (
     const struct sockaddr * paddr, char * pBuf, unsigned bufSize );
 
 /*
@@ -84,7 +84,7 @@ epicsShareFunc unsigned epicsShareAPI sockAddrToA (
  * including the null termination, but always writes at least a
  * null ternminater in the string (if bufSize >= 1)
  */
-epicsShareFunc unsigned epicsShareAPI ipAddrToA (
+LIBCOM_API unsigned LIBCOMSTD_API ipAddrToA (
     const struct sockaddr_in * pInetAddr, char * pBuf, unsigned bufSize );
 
 /*
@@ -95,7 +95,7 @@ epicsShareFunc unsigned epicsShareAPI ipAddrToA (
  * including the null termination, but always writes at least a
  * null ternminater in the string (if bufSize >= 1)
  */
-epicsShareFunc unsigned epicsShareAPI sockAddrToDottedIP ( 
+LIBCOM_API unsigned LIBCOMSTD_API sockAddrToDottedIP ( 
     const struct sockaddr * paddr, char * pBuf, unsigned bufSize );
 
 /*
@@ -106,7 +106,7 @@ epicsShareFunc unsigned epicsShareAPI sockAddrToDottedIP (
  * including the null termination, but always writes at least a
  * null ternminater in the string (if bufSize >= 1)
  */
-epicsShareFunc unsigned epicsShareAPI ipAddrToDottedIP ( 
+LIBCOM_API unsigned LIBCOMSTD_API ipAddrToDottedIP ( 
     const struct sockaddr_in * paddr, char * pBuf, unsigned bufSize );
 
 /*
@@ -118,7 +118,7 @@ epicsShareFunc unsigned epicsShareAPI ipAddrToDottedIP (
  *
  * there are many OS specific implementation stubs for this routine
  */
-epicsShareFunc unsigned epicsShareAPI ipAddrToHostName (
+LIBCOM_API unsigned LIBCOMSTD_API ipAddrToHostName (
     const struct in_addr * pAddr, char * pBuf, unsigned bufSize );
 
 /*
@@ -127,30 +127,30 @@ epicsShareFunc unsigned epicsShareAPI ipAddrToHostName (
  * 2) look for raw number form of ip address with optional port
  * 3) look for valid host name with optional port
  */
-epicsShareFunc int epicsShareAPI aToIPAddr
+LIBCOM_API int LIBCOMSTD_API aToIPAddr
 	( const char * pAddrString, unsigned short defaultPort, struct sockaddr_in * pIP);
 
 /*
  * attempt to convert ASCII host name string with optional port to an IP address
  */
-epicsShareFunc int epicsShareAPI hostToIPAddr 
+LIBCOM_API int LIBCOMSTD_API hostToIPAddr 
 				(const char *pHostName, struct in_addr *pIPA);
 /*
  * attach to BSD socket library
  */
-epicsShareFunc int epicsShareAPI osiSockAttach (void); /* returns T if success, else F */
+LIBCOM_API int LIBCOMSTD_API osiSockAttach (void); /* returns T if success, else F */
 
 /*
  * release BSD socket library
  */
-epicsShareFunc void epicsShareAPI osiSockRelease (void);
+LIBCOM_API void LIBCOMSTD_API osiSockRelease (void);
 
 /*
  * convert socket error numbers to a string
  */
-epicsShareFunc void epicsSocketConvertErrorToString (
+LIBCOM_API void epicsSocketConvertErrorToString (
         char * pBuf, unsigned bufSize, int error );
-epicsShareFunc void epicsSocketConvertErrnoToString (
+LIBCOM_API void epicsSocketConvertErrnoToString (
         char * pBuf, unsigned bufSize );
 
 typedef union osiSockAddr {
@@ -167,7 +167,7 @@ typedef struct osiSockAddrNode {
  * sockAddrAreIdentical() 
  * (returns true if addresses are identical)
  */
-epicsShareFunc int epicsShareAPI sockAddrAreIdentical 
+LIBCOM_API int LIBCOMSTD_API sockAddrAreIdentical 
 			( const osiSockAddr * plhs, const osiSockAddr * prhs );
 
 /*
@@ -188,7 +188,7 @@ epicsShareFunc int epicsShareAPI sockAddrAreIdentical
  * 	Any mutex locking required to protect pList is applied externally.
  *
  */
-epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
+LIBCOM_API void LIBCOMSTD_API osiSockDiscoverBroadcastAddresses
      (ELLLIST *pList, SOCKET socket, const osiSockAddr *pMatchAddr);
 
 /*
@@ -207,7 +207,7 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
  * to current code. After all CA repeaters have been restarted 
  * this osi interface can be eliminated.
  */
-epicsShareFunc osiSockAddr epicsShareAPI osiLocalAddr (SOCKET socket);
+LIBCOM_API osiSockAddr LIBCOMSTD_API osiLocalAddr (SOCKET socket);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/pool/epicsThreadPool.h b/modules/libcom/src/pool/epicsThreadPool.h
index 3416bb2..a410170 100644
--- a/modules/libcom/src/pool/epicsThreadPool.h
+++ b/modules/libcom/src/pool/epicsThreadPool.h
@@ -13,7 +13,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "errMdef.h"
 
 #define S_pool_jobBusy   (M_pool| 1) /*Job already queued or running*/
@@ -59,24 +59,24 @@ typedef struct epicsJob epicsJob;
  * This much be done to preserve future compatibility
  * when new options are added.
  */
-epicsShareFunc void epicsThreadPoolConfigDefaults(epicsThreadPoolConfig *);
+LIBCOM_API void epicsThreadPoolConfigDefaults(epicsThreadPoolConfig *);
 
 /* fetch or create a thread pool which can be shared with other users.
  * may return NULL for allocation failures
  */
-epicsShareFunc epicsThreadPool* epicsThreadPoolGetShared(epicsThreadPoolConfig *opts);
-epicsShareFunc void epicsThreadPoolReleaseShared(epicsThreadPool *pool);
+LIBCOM_API epicsThreadPool* epicsThreadPoolGetShared(epicsThreadPoolConfig *opts);
+LIBCOM_API void epicsThreadPoolReleaseShared(epicsThreadPool *pool);
 
 /* If opts is NULL then defaults are used.
  * The opts pointer is not stored by this call, and may exist on the stack.
  */
-epicsShareFunc epicsThreadPool* epicsThreadPoolCreate(epicsThreadPoolConfig *opts);
+LIBCOM_API epicsThreadPool* epicsThreadPoolCreate(epicsThreadPoolConfig *opts);
 
 /* Blocks until all worker threads have stopped.
  * Any jobs still attached to this pool receive a callback with EPICSJOB_CLEANUP
  * and are then orphaned.
  */
-epicsShareFunc void epicsThreadPoolDestroy(epicsThreadPool *);
+LIBCOM_API void epicsThreadPoolDestroy(epicsThreadPool *);
 
 /* pool control options */
 typedef enum {
@@ -84,7 +84,7 @@ typedef enum {
     epicsThreadPoolQueueRun /* val==0 prevents workers from running jobs, 1 is default */
 } epicsThreadPoolOption;
 
-epicsShareFunc void epicsThreadPoolControl(epicsThreadPool* pool,
+LIBCOM_API void epicsThreadPoolControl(epicsThreadPool* pool,
                                            epicsThreadPoolOption opt,
                                            unsigned int val);
 
@@ -94,7 +94,7 @@ epicsShareFunc void epicsThreadPoolControl(epicsThreadPool* pool,
  * timeout<0 waits forever, timeout==0 polls, timeout>0 waits at most one timeout period
  * Returns 0 for success or non-zero on error (timeout is ETIMEOUT)
  */
-epicsShareFunc int epicsThreadPoolWait(epicsThreadPool* pool, double timeout);
+LIBCOM_API int epicsThreadPoolWait(epicsThreadPool* pool, double timeout);
 
 
 /* Per job operations */
@@ -105,7 +105,7 @@ epicsShareFunc int epicsThreadPoolWait(epicsThreadPool* pool, double timeout);
  * will be the epicsJob*
  */
 #define EPICSJOB_SELF epicsJobArgSelfMagic
-epicsShareExtern void* epicsJobArgSelfMagic;
+LIBCOM_API extern void* epicsJobArgSelfMagic;
 
 /* Creates, but does not add, a new job.
  * If pool is NULL then the job is not associated with any pool and
@@ -113,7 +113,7 @@ epicsShareExtern void* epicsJobArgSelfMagic;
  * Safe to call from a running job function.
  * Returns a new job pointer, or NULL on error.
  */
-epicsShareFunc epicsJob* epicsJobCreate(epicsThreadPool* pool,
+LIBCOM_API epicsJob* epicsJobCreate(epicsThreadPool* pool,
                                         epicsJobFunction cb,
                                         void* user);
 
@@ -121,7 +121,7 @@ epicsShareFunc epicsJob* epicsJobCreate(epicsThreadPool* pool,
  * Job may not be immediately free'd.
  * Safe to call from a running job function.
  */
-epicsShareFunc void epicsJobDestroy(epicsJob*);
+LIBCOM_API void epicsJobDestroy(epicsJob*);
 
 /* Move the job to a different pool.
  * If pool is NULL then the job will no longer be associated
@@ -129,13 +129,13 @@ epicsShareFunc void epicsJobDestroy(epicsJob*);
  * Not thread safe.  Job must not be running or queued.
  * returns 0 on success, non-zero on error.
  */
-epicsShareFunc int epicsJobMove(epicsJob* job, epicsThreadPool* pool);
+LIBCOM_API int epicsJobMove(epicsJob* job, epicsThreadPool* pool);
 
 /* Adds the job to the run queue
  * Safe to call from a running job function.
  * returns 0 for success, non-zero on error.
  */
-epicsShareFunc int epicsJobQueue(epicsJob*);
+LIBCOM_API int epicsJobQueue(epicsJob*);
 
 /* Remove a job from the run queue if it is queued.
  * Safe to call from a running job function.
@@ -143,15 +143,15 @@ epicsShareFunc int epicsJobQueue(epicsJob*);
  *         1 if job already ran, is running, or was not queued before,
  *         Other non-zero on error
  */
-epicsShareFunc int epicsJobUnqueue(epicsJob*);
+LIBCOM_API int epicsJobUnqueue(epicsJob*);
 
 
 /* Mostly useful for debugging */
 
-epicsShareFunc void epicsThreadPoolReport(epicsThreadPool *pool, FILE *fd);
+LIBCOM_API void epicsThreadPoolReport(epicsThreadPool *pool, FILE *fd);
 
 /* Current number of active workers.  May be less than the maximum */
-epicsShareFunc unsigned int epicsThreadPoolNThreads(epicsThreadPool *);
+LIBCOM_API unsigned int epicsThreadPoolNThreads(epicsThreadPool *);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/pool/poolJob.c b/modules/libcom/src/pool/poolJob.c
index 8e86fb7..8ac5e37 100644
--- a/modules/libcom/src/pool/poolJob.c
+++ b/modules/libcom/src/pool/poolJob.c
@@ -9,7 +9,6 @@
 #include <string.h>
 #include <errno.h>
 
-#define epicsExportSharedSymbols
 
 #include "dbDefs.h"
 #include "errlog.h"
diff --git a/modules/libcom/src/pool/threadPool.c b/modules/libcom/src/pool/threadPool.c
index 3cfd066..07d0e0a 100644
--- a/modules/libcom/src/pool/threadPool.c
+++ b/modules/libcom/src/pool/threadPool.c
@@ -9,7 +9,6 @@
 #include <string.h>
 #include <errno.h>
 
-#define epicsExportSharedSymbols
 
 #include "dbDefs.h"
 #include "errlog.h"
@@ -326,7 +325,7 @@ void sharedPoolsInit(void* unused)
     sharedPoolsGuard = epicsMutexMustCreate();
 }
 
-epicsShareFunc epicsThreadPool* epicsThreadPoolGetShared(epicsThreadPoolConfig *opts)
+LIBCOM_API epicsThreadPool* epicsThreadPoolGetShared(epicsThreadPoolConfig *opts)
 {
     ELLNODE *node;
     epicsThreadPool *cur;
@@ -383,7 +382,7 @@ epicsShareFunc epicsThreadPool* epicsThreadPoolGetShared(epicsThreadPoolConfig *
     return cur;
 }
 
-epicsShareFunc void epicsThreadPoolReleaseShared(epicsThreadPool *pool)
+LIBCOM_API void epicsThreadPoolReleaseShared(epicsThreadPool *pool)
 {
     if (!pool)
         return;
diff --git a/modules/libcom/src/ring/epicsRingBytes.c b/modules/libcom/src/ring/epicsRingBytes.c
index ab048e4..2767ea3 100644
--- a/modules/libcom/src/ring/epicsRingBytes.c
+++ b/modules/libcom/src/ring/epicsRingBytes.c
@@ -20,7 +20,6 @@
 #include <stddef.h>
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "epicsSpin.h"
 #include "dbDefs.h"
 #include "epicsRingBytes.h"
@@ -42,7 +41,7 @@ typedef struct ringPvt {
     volatile char buffer[1]; /* actually larger */
 }ringPvt;
 
-epicsShareFunc epicsRingBytesId  epicsShareAPI epicsRingBytesCreate(int size)
+LIBCOM_API epicsRingBytesId  LIBCOMSTD_API epicsRingBytesCreate(int size)
 {
     ringPvt *pring = malloc(sizeof(ringPvt) + size + SLOP);
     if(!pring)
@@ -55,7 +54,7 @@ epicsShareFunc epicsRingBytesId  epicsShareAPI epicsRingBytesCreate(int size)
     return((void *)pring);
 }
 
-epicsShareFunc epicsRingBytesId  epicsShareAPI epicsRingBytesLockedCreate(int size)
+LIBCOM_API epicsRingBytesId  LIBCOMSTD_API epicsRingBytesLockedCreate(int size)
 {
     ringPvt *pring = (ringPvt *)epicsRingBytesCreate(size);
     if(!pring)
@@ -64,14 +63,14 @@ epicsShareFunc epicsRingBytesId  epicsShareAPI epicsRingBytesLockedCreate(int si
     return((void *)pring);
 }
 
-epicsShareFunc void epicsShareAPI epicsRingBytesDelete(epicsRingBytesId id)
+LIBCOM_API void LIBCOMSTD_API epicsRingBytesDelete(epicsRingBytesId id)
 {
     ringPvt *pring = (ringPvt *)id;
     if (pring->lock) epicsSpinDestroy(pring->lock);
     free((void *)pring);
 }
 
-epicsShareFunc int epicsShareAPI epicsRingBytesGet(
+LIBCOM_API int LIBCOMSTD_API epicsRingBytesGet(
     epicsRingBytesId id, char *value,int nbytes)
 {
     ringPvt *pring = (ringPvt *)id;
@@ -115,7 +114,7 @@ epicsShareFunc int epicsShareAPI epicsRingBytesGet(
     return nbytes;
 }
 
-epicsShareFunc int epicsShareAPI epicsRingBytesPut(
+LIBCOM_API int LIBCOMSTD_API epicsRingBytesPut(
     epicsRingBytesId id, char *value,int nbytes)
 {
     ringPvt *pring = (ringPvt *)id;
@@ -167,7 +166,7 @@ epicsShareFunc int epicsShareAPI epicsRingBytesPut(
     return nbytes;
 }
 
-epicsShareFunc void epicsShareAPI epicsRingBytesFlush(epicsRingBytesId id)
+LIBCOM_API void LIBCOMSTD_API epicsRingBytesFlush(epicsRingBytesId id)
 {
     ringPvt *pring = (ringPvt *)id;
 
@@ -176,7 +175,7 @@ epicsShareFunc void epicsShareAPI epicsRingBytesFlush(epicsRingBytesId id)
     if (pring->lock) epicsSpinUnlock(pring->lock);
 }
 
-epicsShareFunc int epicsShareAPI epicsRingBytesFreeBytes(epicsRingBytesId id)
+LIBCOM_API int LIBCOMSTD_API epicsRingBytesFreeBytes(epicsRingBytesId id)
 {
     ringPvt *pring = (ringPvt *)id;
     int nextGet, nextPut;
@@ -192,7 +191,7 @@ epicsShareFunc int epicsShareAPI epicsRingBytesFreeBytes(epicsRingBytesId id)
         return pring->size - nextPut + nextGet - SLOP;
 }
 
-epicsShareFunc int epicsShareAPI epicsRingBytesUsedBytes(epicsRingBytesId id)
+LIBCOM_API int LIBCOMSTD_API epicsRingBytesUsedBytes(epicsRingBytesId id)
 {
     ringPvt *pring = (ringPvt *)id;
     int nextGet, nextPut;
@@ -209,14 +208,14 @@ epicsShareFunc int epicsShareAPI epicsRingBytesUsedBytes(epicsRingBytesId id)
     return used;
 }
 
-epicsShareFunc int epicsShareAPI epicsRingBytesSize(epicsRingBytesId id)
+LIBCOM_API int LIBCOMSTD_API epicsRingBytesSize(epicsRingBytesId id)
 {
     ringPvt *pring = (ringPvt *)id;
 
     return pring->size - SLOP;
 }
 
-epicsShareFunc int epicsShareAPI epicsRingBytesIsEmpty(epicsRingBytesId id)
+LIBCOM_API int LIBCOMSTD_API epicsRingBytesIsEmpty(epicsRingBytesId id)
 {
     ringPvt *pring = (ringPvt *)id;
     int isEmpty;
@@ -228,18 +227,18 @@ epicsShareFunc int epicsShareAPI epicsRingBytesIsEmpty(epicsRingBytesId id)
     return isEmpty;
 }
 
-epicsShareFunc int epicsShareAPI epicsRingBytesIsFull(epicsRingBytesId id)
+LIBCOM_API int LIBCOMSTD_API epicsRingBytesIsFull(epicsRingBytesId id)
 {
     return (epicsRingBytesFreeBytes(id) <= 0);
 }
 
-epicsShareFunc int epicsShareAPI epicsRingBytesHighWaterMark(epicsRingBytesIdConst id)
+LIBCOM_API int LIBCOMSTD_API epicsRingBytesHighWaterMark(epicsRingBytesIdConst id)
 {
     ringPvt *pring = (ringPvt *)id;
     return pring->highWaterMark;
 }
 
-epicsShareFunc void epicsShareAPI epicsRingBytesResetHighWaterMark(epicsRingBytesId id)
+LIBCOM_API void LIBCOMSTD_API epicsRingBytesResetHighWaterMark(epicsRingBytesId id)
 {
     ringPvt *pring = (ringPvt *)id;
     int used;
diff --git a/modules/libcom/src/ring/epicsRingBytes.h b/modules/libcom/src/ring/epicsRingBytes.h
index 3dc0081..fdd0671 100644
--- a/modules/libcom/src/ring/epicsRingBytes.h
+++ b/modules/libcom/src/ring/epicsRingBytes.h
@@ -21,27 +21,27 @@
 extern "C" {
 #endif
 
-#include "shareLib.h"
+#include "libComAPI.h"
 
 typedef void *epicsRingBytesId;
 typedef void const *epicsRingBytesIdConst;
 
-epicsShareFunc epicsRingBytesId  epicsShareAPI epicsRingBytesCreate(int nbytes);
+LIBCOM_API epicsRingBytesId  LIBCOMSTD_API epicsRingBytesCreate(int nbytes);
 /* Same, but secured by a spinlock */
-epicsShareFunc epicsRingBytesId  epicsShareAPI epicsRingBytesLockedCreate(int nbytes);
-epicsShareFunc void epicsShareAPI epicsRingBytesDelete(epicsRingBytesId id);
-epicsShareFunc int  epicsShareAPI epicsRingBytesGet(
+LIBCOM_API epicsRingBytesId  LIBCOMSTD_API epicsRingBytesLockedCreate(int nbytes);
+LIBCOM_API void LIBCOMSTD_API epicsRingBytesDelete(epicsRingBytesId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingBytesGet(
     epicsRingBytesId id, char *value,int nbytes);
-epicsShareFunc int  epicsShareAPI epicsRingBytesPut(
+LIBCOM_API int  LIBCOMSTD_API epicsRingBytesPut(
     epicsRingBytesId id, char *value,int nbytes);
-epicsShareFunc void epicsShareAPI epicsRingBytesFlush(epicsRingBytesId id);
-epicsShareFunc int  epicsShareAPI epicsRingBytesFreeBytes(epicsRingBytesId id);
-epicsShareFunc int  epicsShareAPI epicsRingBytesUsedBytes(epicsRingBytesId id);
-epicsShareFunc int  epicsShareAPI epicsRingBytesSize(epicsRingBytesId id);
-epicsShareFunc int  epicsShareAPI epicsRingBytesIsEmpty(epicsRingBytesId id);
-epicsShareFunc int  epicsShareAPI epicsRingBytesIsFull(epicsRingBytesId id);
-epicsShareFunc int  epicsShareAPI epicsRingBytesHighWaterMark(epicsRingBytesIdConst id);
-epicsShareFunc void epicsShareAPI epicsRingBytesResetHighWaterMark(epicsRingBytesId id);
+LIBCOM_API void LIBCOMSTD_API epicsRingBytesFlush(epicsRingBytesId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingBytesFreeBytes(epicsRingBytesId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingBytesUsedBytes(epicsRingBytesId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingBytesSize(epicsRingBytesId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingBytesIsEmpty(epicsRingBytesId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingBytesIsFull(epicsRingBytesId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingBytesHighWaterMark(epicsRingBytesIdConst id);
+LIBCOM_API void LIBCOMSTD_API epicsRingBytesResetHighWaterMark(epicsRingBytesId id);
 
 #ifdef __cplusplus
 }
diff --git a/modules/libcom/src/ring/epicsRingPointer.cpp b/modules/libcom/src/ring/epicsRingPointer.cpp
index 709ab65..032d96e 100644
--- a/modules/libcom/src/ring/epicsRingPointer.cpp
+++ b/modules/libcom/src/ring/epicsRingPointer.cpp
@@ -20,84 +20,83 @@
 #include <stddef.h>
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "epicsRingPointer.h"
 typedef epicsRingPointer<void> voidPointer;
 
 
-epicsShareFunc epicsRingPointerId  epicsShareAPI epicsRingPointerCreate(int size)
+LIBCOM_API epicsRingPointerId  LIBCOMSTD_API epicsRingPointerCreate(int size)
 {
     voidPointer *pvoidPointer = new voidPointer(size, false);
     return(reinterpret_cast<void *>(pvoidPointer));
 }
 
-epicsShareFunc epicsRingPointerId  epicsShareAPI epicsRingPointerLockedCreate(int size)
+LIBCOM_API epicsRingPointerId  LIBCOMSTD_API epicsRingPointerLockedCreate(int size)
 {
     voidPointer *pvoidPointer = new voidPointer(size, true);
     return(reinterpret_cast<void *>(pvoidPointer));
 }
 
-epicsShareFunc void epicsShareAPI epicsRingPointerDelete(epicsRingPointerId id)
+LIBCOM_API void LIBCOMSTD_API epicsRingPointerDelete(epicsRingPointerId id)
 {
     voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
     delete pvoidPointer;
 }
 
-epicsShareFunc void* epicsShareAPI epicsRingPointerPop(epicsRingPointerId id)
+LIBCOM_API void* LIBCOMSTD_API epicsRingPointerPop(epicsRingPointerId id)
 {
     voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
     return pvoidPointer->pop();
 }
 
-epicsShareFunc int epicsShareAPI epicsRingPointerPush(epicsRingPointerId id, void *p)
+LIBCOM_API int LIBCOMSTD_API epicsRingPointerPush(epicsRingPointerId id, void *p)
 {
     voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
     return((pvoidPointer->push(p) ? 1 : 0));
 }
 
-epicsShareFunc void epicsShareAPI epicsRingPointerFlush(epicsRingPointerId id)
+LIBCOM_API void LIBCOMSTD_API epicsRingPointerFlush(epicsRingPointerId id)
 {
     voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
     pvoidPointer->flush();
 }
 
-epicsShareFunc int epicsShareAPI epicsRingPointerGetFree(epicsRingPointerId id)
+LIBCOM_API int LIBCOMSTD_API epicsRingPointerGetFree(epicsRingPointerId id)
 {
     voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
     return(pvoidPointer->getFree());
 }
 
-epicsShareFunc int epicsShareAPI epicsRingPointerGetUsed(epicsRingPointerId id)
+LIBCOM_API int LIBCOMSTD_API epicsRingPointerGetUsed(epicsRingPointerId id)
 {
     voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
     return(pvoidPointer->getUsed());
 }
 
-epicsShareFunc int epicsShareAPI epicsRingPointerGetSize(epicsRingPointerId id)
+LIBCOM_API int LIBCOMSTD_API epicsRingPointerGetSize(epicsRingPointerId id)
 {
     voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
     return(pvoidPointer->getSize());
 }
 
-epicsShareFunc int epicsShareAPI epicsRingPointerIsEmpty(epicsRingPointerId id)
+LIBCOM_API int LIBCOMSTD_API epicsRingPointerIsEmpty(epicsRingPointerId id)
 {
     voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
     return((pvoidPointer->isEmpty()) ? 1 : 0);
 }
 
-epicsShareFunc int epicsShareAPI epicsRingPointerIsFull(epicsRingPointerId id)
+LIBCOM_API int LIBCOMSTD_API epicsRingPointerIsFull(epicsRingPointerId id)
 {
     voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
     return((pvoidPointer->isFull()) ? 1 : 0);
 }
 
-epicsShareFunc int epicsShareAPI epicsRingPointerGetHighWaterMark(epicsRingPointerIdConst id)
+LIBCOM_API int LIBCOMSTD_API epicsRingPointerGetHighWaterMark(epicsRingPointerIdConst id)
 {
     voidPointer const *pvoidPointer = reinterpret_cast<voidPointer const*>(id);
     return(pvoidPointer->getHighWaterMark());
 }
 
-epicsShareFunc void epicsShareAPI epicsRingPointerResetHighWaterMark(epicsRingPointerId id)
+LIBCOM_API void LIBCOMSTD_API epicsRingPointerResetHighWaterMark(epicsRingPointerId id)
 {
     voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
     pvoidPointer->resetHighWaterMark();
diff --git a/modules/libcom/src/ring/epicsRingPointer.h b/modules/libcom/src/ring/epicsRingPointer.h
index 68bf8f5..6eb8f79 100644
--- a/modules/libcom/src/ring/epicsRingPointer.h
+++ b/modules/libcom/src/ring/epicsRingPointer.h
@@ -24,7 +24,7 @@
  */
 
 #include "epicsSpin.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 template <class T>
@@ -65,22 +65,22 @@ extern "C" {
 typedef void *epicsRingPointerId;
 typedef void const *epicsRingPointerIdConst;
 
-epicsShareFunc epicsRingPointerId  epicsShareAPI epicsRingPointerCreate(int size);
+LIBCOM_API epicsRingPointerId  LIBCOMSTD_API epicsRingPointerCreate(int size);
 /* Same, but secured by a spinlock */
-epicsShareFunc epicsRingPointerId  epicsShareAPI epicsRingPointerLockedCreate(int size);
-epicsShareFunc void epicsShareAPI epicsRingPointerDelete(epicsRingPointerId id);
+LIBCOM_API epicsRingPointerId  LIBCOMSTD_API epicsRingPointerLockedCreate(int size);
+LIBCOM_API void LIBCOMSTD_API epicsRingPointerDelete(epicsRingPointerId id);
 /*ringPointerPush returns (0,1) if p (was not, was) put on ring*/
-epicsShareFunc int  epicsShareAPI epicsRingPointerPush(epicsRingPointerId id,void *p);
+LIBCOM_API int  LIBCOMSTD_API epicsRingPointerPush(epicsRingPointerId id,void *p);
 /*ringPointerPop returns 0 if ring is empty*/
-epicsShareFunc void* epicsShareAPI epicsRingPointerPop(epicsRingPointerId id) ;
-epicsShareFunc void epicsShareAPI epicsRingPointerFlush(epicsRingPointerId id);
-epicsShareFunc int  epicsShareAPI epicsRingPointerGetFree(epicsRingPointerId id);
-epicsShareFunc int  epicsShareAPI epicsRingPointerGetUsed(epicsRingPointerId id);
-epicsShareFunc int  epicsShareAPI epicsRingPointerGetSize(epicsRingPointerId id);
-epicsShareFunc int  epicsShareAPI epicsRingPointerIsEmpty(epicsRingPointerId id);
-epicsShareFunc int  epicsShareAPI epicsRingPointerIsFull(epicsRingPointerId id);
-epicsShareFunc int  epicsShareAPI epicsRingPointerGetHighWaterMark(epicsRingPointerIdConst id);
-epicsShareFunc void epicsShareAPI epicsRingPointerResetHighWaterMark(epicsRingPointerId id);
+LIBCOM_API void* LIBCOMSTD_API epicsRingPointerPop(epicsRingPointerId id) ;
+LIBCOM_API void LIBCOMSTD_API epicsRingPointerFlush(epicsRingPointerId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingPointerGetFree(epicsRingPointerId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingPointerGetUsed(epicsRingPointerId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingPointerGetSize(epicsRingPointerId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingPointerIsEmpty(epicsRingPointerId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingPointerIsFull(epicsRingPointerId id);
+LIBCOM_API int  LIBCOMSTD_API epicsRingPointerGetHighWaterMark(epicsRingPointerIdConst id);
+LIBCOM_API void LIBCOMSTD_API epicsRingPointerResetHighWaterMark(epicsRingPointerId id);
 
 /* This routine was incorrectly named in previous releases */
 #define epicsRingPointerSize epicsRingPointerGetSize
diff --git a/modules/libcom/src/taskwd/taskwd.c b/modules/libcom/src/taskwd/taskwd.c
index 4f30a5a..c1d1238 100644
--- a/modules/libcom/src/taskwd/taskwd.c
+++ b/modules/libcom/src/taskwd/taskwd.c
@@ -17,7 +17,6 @@
 #include <stddef.h>
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include "cantProceed.h"
 #include "dbDefs.h"
 #include "epicsEvent.h"
@@ -356,7 +355,7 @@ void taskwdAnyRemove(void *key)
 
 /* Report function */
 
-epicsShareFunc void taskwdShow(int level)
+LIBCOM_API void taskwdShow(int level)
 {
     struct tNode *pt;
     int mCount, fCount, tCount;
diff --git a/modules/libcom/src/taskwd/taskwd.h b/modules/libcom/src/taskwd/taskwd.h
index 4d5274d..172995e 100644
--- a/modules/libcom/src/taskwd/taskwd.h
+++ b/modules/libcom/src/taskwd/taskwd.h
@@ -17,7 +17,7 @@
 #define INC_taskwd_H
 
 #include "epicsThread.h"
-#include "shareLib.h"
+#include "libComAPI.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -25,15 +25,15 @@ extern "C" {
 
 
 /* Initialization, optional */
-epicsShareFunc void taskwdInit(void);
+LIBCOM_API void taskwdInit(void);
 
 
 /* For tasks to be monitored */
 typedef void (*TASKWDFUNC)(void *usr);
 
-epicsShareFunc void taskwdInsert(epicsThreadId tid,
+LIBCOM_API void taskwdInsert(epicsThreadId tid,
     TASKWDFUNC callback, void *usr);
-epicsShareFunc void taskwdRemove(epicsThreadId tid);
+LIBCOM_API void taskwdRemove(epicsThreadId tid);
 
 
 /* Monitoring API */
@@ -43,20 +43,20 @@ typedef struct {
     void (*remove)(void *usr, epicsThreadId tid);
 } taskwdMonitor;
 
-epicsShareFunc void taskwdMonitorAdd(const taskwdMonitor *funcs, void *usr);
-epicsShareFunc void taskwdMonitorDel(const taskwdMonitor *funcs, void *usr);
+LIBCOM_API void taskwdMonitorAdd(const taskwdMonitor *funcs, void *usr);
+LIBCOM_API void taskwdMonitorDel(const taskwdMonitor *funcs, void *usr);
 
 
 /* Old monitoring API, deprecated */
 typedef void (*TASKWDANYFUNC)(void *usr, epicsThreadId tid);
 
-epicsShareFunc void taskwdAnyInsert(void *key,
+LIBCOM_API void taskwdAnyInsert(void *key,
     TASKWDANYFUNC callback, void *usr);
-epicsShareFunc void taskwdAnyRemove(void *key);
+LIBCOM_API void taskwdAnyRemove(void *key);
 
 
 /* Report function */
-epicsShareFunc void taskwdShow(int level);
+LIBCOM_API void taskwdShow(int level);
 
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/timer/epicsTimer.cpp b/modules/libcom/src/timer/epicsTimer.cpp
index 15bebef..431554c 100644
--- a/modules/libcom/src/timer/epicsTimer.cpp
+++ b/modules/libcom/src/timer/epicsTimer.cpp
@@ -15,7 +15,6 @@
 #include <string>
 #include <stdexcept>
 
-#define epicsExportSharedSymbols
 #include "epicsMath.h"
 #include "epicsTimer.h"
 #include "epicsGuard.h"
@@ -109,7 +108,7 @@ void epicsTimerQueuePassiveForC::destroy ()
     delete this;
 }
 
-epicsShareFunc epicsTimerNotify::expireStatus::expireStatus ( restart_t restart ) : 
+LIBCOM_API epicsTimerNotify::expireStatus::expireStatus ( restart_t restart ) : 
     delay ( - DBL_MAX )
 {
     if ( restart != noRestart ) {
@@ -118,7 +117,7 @@ epicsShareFunc epicsTimerNotify::expireStatus::expireStatus ( restart_t restart 
     }
 }
 
-epicsShareFunc epicsTimerNotify::expireStatus::expireStatus 
+LIBCOM_API epicsTimerNotify::expireStatus::expireStatus 
     ( restart_t restartIn, const double & expireDelaySec ) :
     delay ( expireDelaySec )
 {
@@ -132,12 +131,12 @@ epicsShareFunc epicsTimerNotify::expireStatus::expireStatus
     }
 }
 
-epicsShareFunc bool epicsTimerNotify::expireStatus::restart () const
+LIBCOM_API bool epicsTimerNotify::expireStatus::restart () const
 {
     return this->delay >= 0.0 && finite(this->delay);
 }
 
-epicsShareFunc double epicsTimerNotify::expireStatus::expirationDelay () const
+LIBCOM_API double epicsTimerNotify::expireStatus::expirationDelay () const
 {
     if ( this->delay < 0.0 || !finite(this->delay) ) {
         throw std::logic_error 
@@ -146,7 +145,7 @@ epicsShareFunc double epicsTimerNotify::expireStatus::expirationDelay () const
     return this->delay;
 }
 
-extern "C" epicsTimerQueuePassiveId epicsShareAPI
+extern "C" epicsTimerQueuePassiveId LIBCOMSTD_API
     epicsTimerQueuePassiveCreate ( 
         epicsTimerQueueNotifyReschedule pRescheduleCallbackIn, 
         epicsTimerQueueNotifyQuantum pSleepQuantumCallbackIn,
@@ -163,13 +162,13 @@ extern "C" epicsTimerQueuePassiveId epicsShareAPI
     }
 }
 
-extern "C" void epicsShareAPI 
+extern "C" void LIBCOMSTD_API 
     epicsTimerQueuePassiveDestroy ( epicsTimerQueuePassiveId pQueue )
 {
     pQueue->destroy ();
 }
 
-extern "C" double epicsShareAPI 
+extern "C" double LIBCOMSTD_API 
     epicsTimerQueuePassiveProcess ( epicsTimerQueuePassiveId pQueue )
 {
     try {
@@ -180,7 +179,7 @@ extern "C" double epicsShareAPI
     }
 }
 
-extern "C" epicsTimerId epicsShareAPI epicsTimerQueuePassiveCreateTimer (
+extern "C" epicsTimerId LIBCOMSTD_API epicsTimerQueuePassiveCreateTimer (
     epicsTimerQueuePassiveId pQueue, epicsTimerCallback pCallback, void *pArg )
 {
     try {
@@ -191,19 +190,19 @@ extern "C" epicsTimerId epicsShareAPI epicsTimerQueuePassiveCreateTimer (
     }
 }
 
-extern "C" epicsShareFunc void epicsShareAPI epicsTimerQueuePassiveDestroyTimer ( 
+extern "C" LIBCOM_API void LIBCOMSTD_API epicsTimerQueuePassiveDestroyTimer ( 
     epicsTimerQueuePassiveId /* pQueue */, epicsTimerId pTmr )
 {
     pTmr->destroy ();
 }
 
-extern "C" void  epicsShareAPI epicsTimerQueuePassiveShow (
+extern "C" void  LIBCOMSTD_API epicsTimerQueuePassiveShow (
     epicsTimerQueuePassiveId pQueue, unsigned int level )
 {
     pQueue->show ( level );
 }
 
-extern "C" epicsTimerQueueId epicsShareAPI
+extern "C" epicsTimerQueueId LIBCOMSTD_API
     epicsTimerQueueAllocate ( int okToShare, unsigned int threadPriority )
 {
     try {
@@ -218,12 +217,12 @@ extern "C" epicsTimerQueueId epicsShareAPI
     }
 }
 
-extern "C" void epicsShareAPI epicsTimerQueueRelease ( epicsTimerQueueId pQueue )
+extern "C" void LIBCOMSTD_API epicsTimerQueueRelease ( epicsTimerQueueId pQueue )
 {
     pQueue->release ();
 }
 
-extern "C" epicsTimerId epicsShareAPI epicsTimerQueueCreateTimer (
+extern "C" epicsTimerId LIBCOMSTD_API epicsTimerQueueCreateTimer (
     epicsTimerQueueId pQueue, epicsTimerCallback pCallback, void *pArg )
 {
     try {
@@ -234,41 +233,41 @@ extern "C" epicsTimerId epicsShareAPI epicsTimerQueueCreateTimer (
     }
 }
 
-extern "C" void  epicsShareAPI epicsTimerQueueShow (
+extern "C" void  LIBCOMSTD_API epicsTimerQueueShow (
     epicsTimerQueueId pQueue, unsigned int level )
 {
     pQueue->show ( level );
 }
 
-extern "C" void epicsShareAPI epicsTimerQueueDestroyTimer ( 
+extern "C" void LIBCOMSTD_API epicsTimerQueueDestroyTimer ( 
     epicsTimerQueueId /* pQueue */, epicsTimerId pTmr )
 {
     pTmr->destroy ();
 }
 
-extern "C" void  epicsShareAPI epicsTimerStartTime (
+extern "C" void  LIBCOMSTD_API epicsTimerStartTime (
     epicsTimerId pTmr, const epicsTimeStamp *pTime )
 {
     pTmr->start ( *pTmr, *pTime );
 }
 
-extern "C" void  epicsShareAPI epicsTimerStartDelay (
+extern "C" void  LIBCOMSTD_API epicsTimerStartDelay (
     epicsTimerId pTmr, double delaySeconds )
 {
     pTmr->start ( *pTmr, delaySeconds );
 }
 
-extern "C" void  epicsShareAPI epicsTimerCancel ( epicsTimerId pTmr )
+extern "C" void  LIBCOMSTD_API epicsTimerCancel ( epicsTimerId pTmr )
 {
     pTmr->cancel ();
 }
 
-extern "C" double  epicsShareAPI epicsTimerGetExpireDelay ( epicsTimerId pTmr )
+extern "C" double  LIBCOMSTD_API epicsTimerGetExpireDelay ( epicsTimerId pTmr )
 {
     return pTmr->getExpireDelay ();
 }
 
-extern "C" void  epicsShareAPI epicsTimerShow (
+extern "C" void  LIBCOMSTD_API epicsTimerShow (
     epicsTimerId pTmr, unsigned int level )
 {
     pTmr->timer::show ( level );
diff --git a/modules/libcom/src/timer/epicsTimer.h b/modules/libcom/src/timer/epicsTimer.h
index 6e054ed..615094e 100644
--- a/modules/libcom/src/timer/epicsTimer.h
+++ b/modules/libcom/src/timer/epicsTimer.h
@@ -16,7 +16,7 @@
 
 #include <float.h>
 
-#include "shareLib.h"
+#include "libComAPI.h"
 #include "epicsTime.h"
 #include "epicsThread.h"
 
@@ -28,15 +28,15 @@
  */
 
 /* code using a timer must implement epicsTimerNotify */
-class epicsShareClass epicsTimerNotify {
+class LIBCOM_API epicsTimerNotify {
 public:
     enum restart_t { noRestart, restart };
     class expireStatus {
     public:
-        epicsShareFunc expireStatus ( restart_t );
-        epicsShareFunc expireStatus ( restart_t, const double & expireDelaySec );
-        epicsShareFunc bool restart () const;
-        epicsShareFunc double expirationDelay () const;
+        LIBCOM_API expireStatus ( restart_t );
+        LIBCOM_API expireStatus ( restart_t, const double & expireDelaySec );
+        LIBCOM_API bool restart () const;
+        LIBCOM_API double expirationDelay () const;
     private:
         double delay;
     };
@@ -47,7 +47,7 @@ public:
     virtual void show ( unsigned int level ) const;
 };
 
-class epicsShareClass epicsTimer {
+class LIBCOM_API epicsTimer {
 public:
     /* calls cancel (see warning below) and then destroys the timer */
     virtual void destroy () = 0;
@@ -75,17 +75,17 @@ public:
     virtual epicsTimer & createTimer () = 0;
     virtual void show ( unsigned int level ) const = 0;
 protected:
-    epicsShareFunc virtual ~epicsTimerQueue () = 0;
+    LIBCOM_API virtual ~epicsTimerQueue () = 0;
 };
 
 class epicsTimerQueueActive
     : public epicsTimerQueue {
 public:
-    static epicsShareFunc epicsTimerQueueActive & allocate (
+    static LIBCOM_API epicsTimerQueueActive & allocate (
         bool okToShare, unsigned threadPriority = epicsThreadPriorityMin + 10 );
     virtual void release () = 0; 
 protected:
-    epicsShareFunc virtual ~epicsTimerQueueActive () = 0;
+    LIBCOM_API virtual ~epicsTimerQueueActive () = 0;
 };
 
 class epicsTimerQueueNotify {
@@ -97,14 +97,14 @@ public:
     /* return this quantum in seconds. If unknown then return zero. */
     virtual double quantum () = 0;
 protected:
-    epicsShareFunc virtual ~epicsTimerQueueNotify () = 0;
+    LIBCOM_API virtual ~epicsTimerQueueNotify () = 0;
 };
 
 class epicsTimerQueuePassive
     : public epicsTimerQueue {
 public:
-    static epicsShareFunc epicsTimerQueuePassive & create ( epicsTimerQueueNotify & );
-    epicsShareFunc virtual ~epicsTimerQueuePassive () = 0; /* ok to call delete */
+    static LIBCOM_API epicsTimerQueuePassive & create ( epicsTimerQueueNotify & );
+    LIBCOM_API virtual ~epicsTimerQueuePassive () = 0; /* ok to call delete */
     virtual double process ( const epicsTime & currentTime ) = 0; /* returns delay to next expire */
 };
 
@@ -135,47 +135,47 @@ typedef void ( *epicsTimerCallback ) ( void *pPrivate );
 
 /* thread managed timer queue */
 typedef struct epicsTimerQueueActiveForC * epicsTimerQueueId;
-epicsShareFunc epicsTimerQueueId epicsShareAPI
+LIBCOM_API epicsTimerQueueId LIBCOMSTD_API
     epicsTimerQueueAllocate ( int okToShare, unsigned int threadPriority );
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsTimerQueueRelease ( epicsTimerQueueId );
-epicsShareFunc epicsTimerId epicsShareAPI 
+LIBCOM_API epicsTimerId LIBCOMSTD_API 
     epicsTimerQueueCreateTimer ( epicsTimerQueueId queueid, 
         epicsTimerCallback callback, void *arg );
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsTimerQueueDestroyTimer ( epicsTimerQueueId queueid, epicsTimerId id );
-epicsShareFunc void  epicsShareAPI 
+LIBCOM_API void  LIBCOMSTD_API 
     epicsTimerQueueShow ( epicsTimerQueueId id, unsigned int level );
 
 /* passive timer queue */
 typedef struct epicsTimerQueuePassiveForC * epicsTimerQueuePassiveId;
 typedef void ( * epicsTimerQueueNotifyReschedule ) ( void * pPrivate );
 typedef double ( * epicsTimerQueueNotifyQuantum ) ( void * pPrivate );
-epicsShareFunc epicsTimerQueuePassiveId epicsShareAPI
+LIBCOM_API epicsTimerQueuePassiveId LIBCOMSTD_API
     epicsTimerQueuePassiveCreate ( epicsTimerQueueNotifyReschedule, 
         epicsTimerQueueNotifyQuantum, void *pPrivate );
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsTimerQueuePassiveDestroy ( epicsTimerQueuePassiveId );
-epicsShareFunc epicsTimerId epicsShareAPI 
+LIBCOM_API epicsTimerId LIBCOMSTD_API 
     epicsTimerQueuePassiveCreateTimer (
         epicsTimerQueuePassiveId queueid, epicsTimerCallback pCallback, void *pArg );
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsTimerQueuePassiveDestroyTimer ( epicsTimerQueuePassiveId queueid, epicsTimerId id );
-epicsShareFunc double epicsShareAPI 
+LIBCOM_API double LIBCOMSTD_API 
     epicsTimerQueuePassiveProcess ( epicsTimerQueuePassiveId );
-epicsShareFunc void  epicsShareAPI 
+LIBCOM_API void  LIBCOMSTD_API 
     epicsTimerQueuePassiveShow ( epicsTimerQueuePassiveId id, unsigned int level );
 
 /* timer */
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsTimerStartTime ( epicsTimerId id, const epicsTimeStamp *pTime );
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsTimerStartDelay ( epicsTimerId id, double delaySeconds );
-epicsShareFunc void epicsShareAPI 
+LIBCOM_API void LIBCOMSTD_API 
     epicsTimerCancel ( epicsTimerId id );
-epicsShareFunc double epicsShareAPI 
+LIBCOM_API double LIBCOMSTD_API 
     epicsTimerGetExpireDelay ( epicsTimerId id );
-epicsShareFunc void  epicsShareAPI 
+LIBCOM_API void  LIBCOMSTD_API 
     epicsTimerShow ( epicsTimerId id, unsigned int level );
 
 #ifdef __cplusplus
diff --git a/modules/libcom/src/timer/timer.cpp b/modules/libcom/src/timer/timer.cpp
index 6f0c7ea..f9133b3 100644
--- a/modules/libcom/src/timer/timer.cpp
+++ b/modules/libcom/src/timer/timer.cpp
@@ -19,7 +19,6 @@
 #include <stdexcept>
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "epicsGuard.h"
 #include "timerPrivate.h"
 #include "errlog.h"
diff --git a/modules/libcom/src/timer/timerQueue.cpp b/modules/libcom/src/timer/timerQueue.cpp
index a62eab9..e272e61 100644
--- a/modules/libcom/src/timer/timerQueue.cpp
+++ b/modules/libcom/src/timer/timerQueue.cpp
@@ -15,7 +15,6 @@
 #include <stdio.h>
 #include <float.h>
 
-#define epicsExportSharedSymbols
 #include "epicsGuard.h"
 #include "timerPrivate.h"
 #include "errlog.h"
diff --git a/modules/libcom/src/timer/timerQueueActive.cpp b/modules/libcom/src/timer/timerQueueActive.cpp
index 5751b24..debff77 100644
--- a/modules/libcom/src/timer/timerQueueActive.cpp
+++ b/modules/libcom/src/timer/timerQueueActive.cpp
@@ -14,7 +14,6 @@
 
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "epicsAtomic.h"
 #include "timerPrivate.h"
 #include "errlog.h"
diff --git a/modules/libcom/src/timer/timerQueueActiveMgr.cpp b/modules/libcom/src/timer/timerQueueActiveMgr.cpp
index eff2e0c..7e382f6 100644
--- a/modules/libcom/src/timer/timerQueueActiveMgr.cpp
+++ b/modules/libcom/src/timer/timerQueueActiveMgr.cpp
@@ -15,7 +15,6 @@
 
 #include <limits.h>
 
-#define epicsExportSharedSymbols
 #include "epicsGuard.h"
 #include "timerPrivate.h"
 
diff --git a/modules/libcom/src/timer/timerQueuePassive.cpp b/modules/libcom/src/timer/timerQueuePassive.cpp
index a352c56..7544840 100644
--- a/modules/libcom/src/timer/timerQueuePassive.cpp
+++ b/modules/libcom/src/timer/timerQueuePassive.cpp
@@ -23,7 +23,6 @@
 
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "timerPrivate.h"
 
 epicsTimerQueuePassive::~epicsTimerQueuePassive () {}
diff --git a/modules/libcom/src/yacc/Makefile b/modules/libcom/src/yacc/Makefile
index 4f20830..6a3ba72 100644
--- a/modules/libcom/src/yacc/Makefile
+++ b/modules/libcom/src/yacc/Makefile
@@ -23,7 +23,7 @@ antelope_SRCS += skeleton.c
 antelope_SRCS += symtab.c
 antelope_SRCS += verbose.c
 antelope_SRCS += warshall.c
-antelope_OBJS += epicsTempFile$(OBJ)
+antelope_OBJS += epicsTempFilex$(OBJ)
 
 PROD_HOST += antelope
 
diff --git a/modules/libcom/src/yacc/antelope.c b/modules/libcom/src/yacc/antelope.c
index 7143b38..73ef28b 100644
--- a/modules/libcom/src/yacc/antelope.c
+++ b/modules/libcom/src/yacc/antelope.c
@@ -8,7 +8,6 @@
 \*************************************************************************/
 #include <signal.h>
 #include "defs.h"
-#define epicsExportSharedSymbols
 #include "epicsTempFile.h"
 #undef epicsExportSharedSymbols
 
diff --git a/modules/libcom/src/yajl/yajl.c b/modules/libcom/src/yajl/yajl.c
index 6c49775..02ca188 100644
--- a/modules/libcom/src/yajl/yajl.c
+++ b/modules/libcom/src/yajl/yajl.c
@@ -19,7 +19,6 @@
 #include <stdarg.h>
 #include <assert.h>
 
-#define epicsExportSharedSymbols
 #include "yajl_parse.h"
 #include "yajl_lex.h"
 #include "yajl_parser.h"
diff --git a/modules/libcom/src/yajl/yajl_alloc.c b/modules/libcom/src/yajl/yajl_alloc.c
index 5b26016..2388814 100644
--- a/modules/libcom/src/yajl/yajl_alloc.c
+++ b/modules/libcom/src/yajl/yajl_alloc.c
@@ -22,7 +22,6 @@
 
 #include <stdlib.h>
 
-#define epicsExportSharedSymbols
 #include "yajl_alloc.h"
 
 static void * yajl_internal_malloc(void *ctx, size_t sz)
diff --git a/modules/libcom/src/yajl/yajl_buf.c b/modules/libcom/src/yajl/yajl_buf.c
index 0f9c280..182db72 100644
--- a/modules/libcom/src/yajl/yajl_buf.c
+++ b/modules/libcom/src/yajl/yajl_buf.c
@@ -18,7 +18,6 @@
 #include <stdlib.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "yajl_buf.h"
 
 #define YAJL_BUF_INIT_SIZE 2048
diff --git a/modules/libcom/src/yajl/yajl_common.h b/modules/libcom/src/yajl/yajl_common.h
index 4bc63ee..8bf0b44 100644
--- a/modules/libcom/src/yajl/yajl_common.h
+++ b/modules/libcom/src/yajl/yajl_common.h
@@ -18,7 +18,7 @@
 #define __YAJL_COMMON_H__
 
 #include <stddef.h>
-#include <shareLib.h>
+#include <libComAPI.h>
 
 #include <epicsVersion.h>
 
@@ -42,7 +42,7 @@ extern "C" {
 
 #define YAJL_MAX_DEPTH 128
 
-#define YAJL_API epicsShareFunc
+#define YAJL_API LIBCOM_API
 
 /** pointer to a malloc function, supporting client overriding memory
  *  allocation routines */
diff --git a/modules/libcom/src/yajl/yajl_encode.c b/modules/libcom/src/yajl/yajl_encode.c
index 980021e..0aa06a3 100644
--- a/modules/libcom/src/yajl/yajl_encode.c
+++ b/modules/libcom/src/yajl/yajl_encode.c
@@ -19,7 +19,6 @@
 #include <string.h>
 #include <stdio.h>
 
-#define epicsExportSharedSymbols
 #include "yajl_encode.h"
 
 static void CharToHex(unsigned char c, char * hexBuf)
diff --git a/modules/libcom/src/yajl/yajl_gen.c b/modules/libcom/src/yajl/yajl_gen.c
index 7f66924..0727e9f 100644
--- a/modules/libcom/src/yajl/yajl_gen.c
+++ b/modules/libcom/src/yajl/yajl_gen.c
@@ -19,7 +19,6 @@
 #include <stdio.h>
 #include <stdarg.h>
 
-#define epicsExportSharedSymbols
 #include "epicsMath.h"
 #include "yajl_gen.h"
 #include "yajl_buf.h"
diff --git a/modules/libcom/src/yajl/yajl_lex.c b/modules/libcom/src/yajl/yajl_lex.c
index 0159cfa..b911da6 100644
--- a/modules/libcom/src/yajl/yajl_lex.c
+++ b/modules/libcom/src/yajl/yajl_lex.c
@@ -19,7 +19,6 @@
 #include <assert.h>
 #include <string.h>
 
-#define epicsExportSharedSymbols
 #include "yajl_lex.h"
 #include "yajl_buf.h"
 
diff --git a/modules/libcom/src/yajl/yajl_parser.c b/modules/libcom/src/yajl/yajl_parser.c
index 7e4da69..cb910f7 100644
--- a/modules/libcom/src/yajl/yajl_parser.c
+++ b/modules/libcom/src/yajl/yajl_parser.c
@@ -23,7 +23,6 @@
 #include <assert.h>
 #include <math.h>
 
-#define epicsExportSharedSymbols
 #include "yajl_parse.h"
 #include "yajl_lex.h"
 #include "yajl_parser.h"

Replies:
Re: [Merge] ~epics-core/epics-base/+git/Com:libcom-api into epics-base:7.0 Ralph Lange via Core-talk
Re: [Merge] ~epics-core/epics-base/+git/Com:libcom-api into epics-base:7.0 mdavidsaver via Core-talk

Navigate by Date:
Prev: Re: [Merge] ~epics-core/epics-base/+git/Com:errlog2syslog into epics-base:7.0 mdavidsaver via Core-talk
Next: Jenkins build is still unstable: epics-7.0 » linux64 #171 APS Jenkins via Core-talk
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  <20192020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Build failed: epics-base base-integration-362 AppVeyor via Core-talk
Next: Re: [Merge] ~epics-core/epics-base/+git/Com:libcom-api into epics-base:7.0 Ralph Lange via Core-talk
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  <20192020  2021  2022  2023  2024 
ANJ, 25 Nov 2019 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·