Explicitly exporting shared library functions in Linux


C++ Problem Overview

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.

C++ Solutions

Solution 1 - C++


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
    //	do nothing and hope for the best?
    #define EXPORT
    #define IMPORT
    #pragma warning Unknown dynamic link import/export semantics.

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:


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

MY_LIB_PUBLIC void foo();

class MY_LIB_PUBLIC some_type
    // ...


All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiontheactiveactorView Question on Stackoverflow
Solution 1 - C++Travis GockelView Answer on Stackoverflow