EMA C++ Compiler Settings

EMA C++ Project Settings and Templates

The following guides provide the necessary compiler and environment settings required to build and run an EMA C++ application.

Note: EMA is packaged as part of the Refinitiv Real-Time SDK (RTSDK) bundle.  Refer to the README file within the Ema subfolder of the RTSDK bundle for the complete list of OS and compiler support.

The EMA packages provide the ability to:

  • Build statically linked and dynamically linked binaries
  • Support for debug and release build types
  • Support for 64-bit architectures

Choose your development environment:

  EMA static libraries EMA shared libraries
Visual Studio Statically Linked Binary Dynamically Linked Binary
Linux Statically Linked Binary Dynamically Linked Binary

Windows - Visual Studio - Statically Linked Binary

Note: <EMA root> is a directory which is located within your RTSDK installation package

Include Path Within Properties: VC++ Directories -> Include Directories define the following:
  • <EMA root>\Cpp-C\Ema\Src\Access\Include; <EMA root>\Cpp-C\Ema\Src\Domain\Login\Include; <EMA root>\Cpp-C\Ema\Src\Rdm\Include; <EMA root>\Cpp-C\Ema\Src\Include; <EMA root>\Cpp-C\Ema\Src; <EMA root>\Cpp-C\Eta\Include\Reactor; <EMA root>\Cpp-C\Eta\Include\Util; <EMA root>\Cpp-C\Eta\Include\RDM; <EMA root>\Cpp-C\Eta\Include\Codec; <EMA root>\Cpp-C\Eta\Include\Transport; <EMA root>\Cpp-C\Eta\Impl\Util\Include; <EMA root>\Cpp-C\Eta\Utils\Libxml2; <EMA root>\Cpp-C\Eta\Utils\Libxml2\include\libxml; <EMA root>\Cpp-C\Eta\Utils\Libxml2\include

Lib Path
VS2017

(EMA 1.2 or greater)

Within Properties: VC++ Directories -> Library Directories define only one based on your build preference:
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS150\Debug_MDd; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS150\Debug_MDd;
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS150\Release_MD; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS150\Release_MD;
Lib Path
VS2015
(EMA 1.0.2 or greater)
Within Properties: VC++ Directories -> Library Directories define only one based on your build preference:
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS140\Debug_MDd; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS140\Debug_MDd;
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS140\Release_MD; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS140\Release_MD;
Lib Path
VS2013
Within Properties: VC++ Directories -> Library Directories define only one based on your build preference:
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS120\Debug_MDd; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS120\Debug_MDd;
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS120\Release_MD; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS120\Release_MD;
Lib Path
VS2012
Within Properties: VC++ Directories -> Library Directories define only one based on your build preference:
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS110\Debug_MDd; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS110\Debug_MDd;
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS110\Release_MD; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS110\Release_MD;
Libs Within Properties: Linker -> Input -> Additional Dependencies include the entry below:
  • libema.lib; librsslVA.lib; librssl.lib; libxml2.lib
Compiler Settings Within Properties define all settings below:
  • C/C++ -> Precompiled Headers define: Precompiled Header: Not using Precompiled Headers
  • Linker -> Advanced: Ensure Image Has Safe Exception Handlers is blank
Runtime Environment No runtime environment settings required.

Windows - Visual Studio - Dynamically Linked Binary

Note: <EMA root> is a directory which is located within your RTSDK installation package

Include Path Within Properties: VC++ Directories -> Include Directories define the following:
  • <EMA root>\Cpp-C\Ema\Src\Access\Include; <EMA root>\Cpp-C\Ema\Src\Domain\Login\Include; <EMA root>\Cpp-C\Ema\Src\Rdm\Include; <EMA root>\Cpp-C\Ema\Src\Include; <EMA root>\Cpp-C\Ema\Src; <EMA root>\Cpp-C\Eta\Include\Reactor; <EMA root>\Cpp-C\Eta\Include\Util; <EMA root>\Cpp-C\Eta\Include\RDM; <EMA root>\Cpp-C\Eta\Include\Codec; <EMA root>\Cpp-C\Eta\Include\Transport; <EMA root>\Cpp-C\Eta\Impl\Util\Include; <EMA root>\Cpp-C\Eta\Utils\Libxml2; <EMA root>\Cpp-C\Eta\Utils\Libxml2\include\libxml; <EMA root>\Cpp-C\Eta\Utils\Libxml2\include

Lib Path
VS2017

(EMA 1.2 or greater)

Within Properties: VC++ Directories -> Library Directories define only one based on your build preference:
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS150\Debug_MDd\Shared; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS150\Debug_MDd\Shared;
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS150\Release_MD\Shared; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS150\Release_MD\Shared;
Lib Path
VS2015
(EMA 1.0.2 or greater)
Within Properties: VC++ Directories -> Library Directories define only one based on your build preference:
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS140\Debug_MDd\Shared; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS140\Debug_MDd\Shared;
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS140\Release_MD\Shared; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS140\Release_MD\Shared;
Lib Path
VS2013
Within Properties: VC++ Directories -> Library Directories define only one based on your build preference:
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS120\Debug_MDd\Shared; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS120\Debug_MDd\Shared;
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS120\Release_MD\Shared; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS120\Release_MD\Shared;
Lib Path
VS2012
Within Properties: VC++ Directories -> Library Directories define only one based on your build preference:
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS110\Debug_MDd\Shared; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS110\Debug_MDd\Shared;
  • <EMA root>\Cpp-C\Ema\Libs\WIN_64_VS110\Release_MD\Shared; <EMA root>\Cpp-C\Eta\Libs\WIN_64_VS110\Release_MD\Shared;
Libs Within Properties: Linker -> Input -> Additional Dependencies include the entry below:
  • libema.lib; librsslVA.lib; librssl.lib; libxml2.lib
Compiler Settings Within Properties define all settings below:
  • C/C++ -> Precompiled Headers define: Precompiled Header: Not using Precompiled Headers
  • Linker -> Advanced: Ensure Image Has Safe Exception Handlers is blank
Runtime Environment Ensure the selected Lib Path detailed above is defined within your system path

Linux - Statically Linked Binary

Note: <EMA root> is a directory which is located within your RTSDK installation package

Include Path Using the header include flag (-I):
  • <EMA root>/Src;<EMA root>/Src/Include
Lib Path Using the library include flag (-L), choose one based on your compiler:
Compiler EMA Lib Path
GCC suite 4.4.4 or higher for RHAS 6.0 (64-bit)
  • -L<EMA root>/Libs/RHEL6_64_GCC444/Optimized
  • -L<EMA root>/Libs/RHEL6_64_GCC444/Optimized_Assert
GCC suite 4.8.2 or higher for Oracle Linux 7.0 (64-bit)
  • -L<EMA root>/Libs/OL7_64_GCC482/Optimized
  • -L<EMA root>/Libs/OL7_64_GCC482/Optimized_Assert
Note: Oracle Linux 7.0 libraries are fully compatible with RHEL7.
Libs Libraries to be linked using (-l):
  • -lema
Compiler Settings Compiler flags (-D): -DLinux
Runtime Environment No runtime environment settings required.

Linux - Dynamically Linked Binary

Note: <EMA root> is a directory which is located within your RTSDK installation package

EMA contains a convenient script within the Libs subfolder called: createSharedLibraryLinks.sh.  Before building your applications using shared libraries, execute this command from the EMA root folder, i.e.

    	
            <ema root>: sh Libs/createSharedLibraryLinks.sh
        
        
    

 

Include Path Using the header include flag (-I):
  • <EMA root>/Src;<EMA root>/Src/Include
Lib Path Using the library include flag (-L), choose one based on your compiler:
Compiler EMA Lib Path
GCC suite 4.4.4 or higher for RHAS 6.0 (64-bit)
  • -L<EMA root>/Libs/RHEL6_64_GCC444/Optimized/Shared
  • -L<EMA root>/Libs/RHEL6_64_GCC444/Optimized_Assert/Shared
GCC suite 4.8.2 or higher for Oracle Linux 7.0 (64-bit)
  • -L<EMA root>/Libs/OL7_64_GCC482/Optimized/Shared
  • -L<EMA root>/Libs/OL7_64_GCC482/Optimized_Assert/Shared
Note: Oracle Linux 7.0 libraries are fully compatible with RHEL7.
Libs Libraries to be linked using (-l):
  • -lema
Compiler Settings Compiler flags (-D): -DLinux
Runtime Environment Ensure the selected Lib Path detailed above is defined within your library path environment variable: LD_LIBRARY_PATH