Skip to content
/ ABI Public

Convenience macro to import and export symbols

License

Notifications You must be signed in to change notification settings

Eyenseo/ABI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

About

The main macro defined by this header is E_ABI(s) and it is used to export and import symbols of dynamic libraries.

The normal solution is to create a header for each library, copy & paste the contents of an existing library header and then change the macros that are being defined by search and replace. If your project only has a few libraries this header will not proove to be of much convenience. (Lazzy people might want to disagree with that after the first copy without further modifications ;))

Usage

void E_ABI(my_lib) foo();

Will evaluate to different statements depending on compile-time definitions.

The default behaviour is to import symbols. To export foo you'll have to pass E_ABI_my_lib as definition to the compiler (eg. gcc -DE_ABI_my_lib ...). If the library is build as static version you can pass E_ABI_STATIC_my_lib since the linker will handle all symbols.

import export static
E_ABI_my_lib E_ABI_STATIC_my_lib
E_ABI_my_lib 0 E_ABI_my_lib 1 E_ABI_STATIC_my_lib 1
E_ABI_my_lib 2 -------------- ---------------------
E_ABI_my_lib a -------------- ---------------------
... -------------- ---------------------
  • Import means either __declspec(dllimport), __attribute__((dllimport)) or __attribute__((visibility("default"))) depending on the platform / compiler.
  • Export means either __declspec(dllexport), __attribute__((dllexport)) or __attribute__((visibility("default"))) depending on the platform / compiler.
  • Static means that the macro will be evaluated to nothing -- the linker will take care of everything.

To gain benefits from "exporting / importing" with gcc / clang the compile option -fvisibility=hidden has to be passed to the compiler. But if you didn't know that already you should head over to this page and read up on this subject.

Credits

pfultz2 for his Cloak library.

About

Convenience macro to import and export symbols

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published