GLM shared doesnt export DLL symbols
orion160 opened this issue · comments
Isaac David commented
On windows it doesnt create glm.lib.
Sean Harmer commented
Just ran into this too.
Sean Harmer commented
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...
Sean Harmer commented
I've made an attempt at a fix in #1280