Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Explicitly exporting shared library functions in Linux

Tags:

c++

linux

Is there a Linux equivalent of __declspec(dllexport) notation for explicitly exporting a function from a shared library? For some reason with the toolchain I'm using, functions that aren't class members don't appear in the resulting shared library file.

like image 756
theactiveactor Avatar asked Jan 29 '10 20:01

theactiveactor


1 Answers

__attribute__((visibility("default"))) 

And there is no equivalent of __declspec(dllimport) to my knowledge.

#if defined(_MSC_VER)     //  Microsoft      #define EXPORT __declspec(dllexport)     #define IMPORT __declspec(dllimport) #elif defined(__GNUC__)     //  GCC     #define EXPORT __attribute__((visibility("default")))     #define IMPORT #else     //  do nothing and hope for the best?     #define EXPORT     #define IMPORT     #pragma warning Unknown dynamic link import/export semantics. #endif 

Typical usage is to define a symbol like MY_LIB_PUBLIC conditionally define it as either EXPORT or IMPORT, based on if the library is currently being compiled or not:

#if MY_LIB_COMPILING #   define MY_LIB_PUBLIC EXPORT #else #   define MY_LIB_PUBLIC IMPORT #endif 

To use this, you mark your functions and classes like this:

MY_LIB_PUBLIC void foo();  class MY_LIB_PUBLIC some_type {     // ... }; 
like image 66
Travis Gockel Avatar answered Sep 22 '22 10:09

Travis Gockel