g-truc / glm

OpenGL Mathematics (GLM)

Home Page:https://glm.g-truc.net

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

GLM shared doesnt export DLL symbols

orion160 opened this issue · comments

On windows it doesnt create glm.lib.

Just ran into this too.

Not sure if this worked prior to #1186 or not but it seems relevant.

In spdlog, the exports are marked by SPDLOG_API which is setup in common.h by:

#ifdef SPDLOG_COMPILED_LIB
    #undef SPDLOG_HEADER_ONLY
    #if defined(SPDLOG_SHARED_LIB)
        #if defined(_WIN32)
            #ifdef spdlog_EXPORTS
                #define SPDLOG_API __declspec(dllexport)
            #else  // !spdlog_EXPORTS
                #define SPDLOG_API __declspec(dllimport)
            #endif
        #else  // !defined(_WIN32)
            #define SPDLOG_API __attribute__((visibility("default")))
        #endif
    #else  // !defined(SPDLOG_SHARED_LIB)
        #define SPDLOG_API
    #endif
    #define SPDLOG_INLINE
#else  // !defined(SPDLOG_COMPILED_LIB)
    #define SPDLOG_API
    #define SPDLOG_HEADER_ONLY
    #define SPDLOG_INLINE inline
#endif  // #ifdef SPDLOG_COMPILED_LIB

CMake has a handy function for generating a suitable header. We use a snippet like this in our project to generate and install such a header:

include(GenerateExportHeader)
generate_export_header(KDGpuExample BASE_NAME kdgpuexample)
configure_file(
    ${CMAKE_CURRENT_BINARY_DIR}/kdgpuexample_export.h ${CMAKE_BINARY_DIR}/include/KDGpuExample/kdgpuexample_export.h
)
install(
    FILES ${CMAKE_CURRENT_BINARY_DIR}/kdgpuexample_export.h
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/KDGpuExample
)

Then the export/import macro needs adding to the relevant symbols...

I've made an attempt at a fix in #1280