g-truc / glm

OpenGL Mathematics (GLM)
https://glm.g-truc.net
Other
9.34k stars 2.14k forks source link

GLM shared doesnt export DLL symbols #1279

Open orion160 opened 8 months ago

orion160 commented 8 months ago

On windows it doesnt create glm.lib.

seanharmer commented 8 months ago

Just ran into this too.

seanharmer commented 8 months ago

Not sure if this worked prior to https://github.com/g-truc/glm/pull/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...

seanharmer commented 8 months ago

I've made an attempt at a fix in https://github.com/g-truc/glm/pull/1280