diff --git a/CMakeLists.txt b/CMakeLists.txt index 532494d..e7be197 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -303,7 +303,8 @@ if(EVPATH_TRANSPORT_MODULES) foreach(M cmselect cmsockets cmudp cmmulticast) set_target_properties(${M} PROPERTIES OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}${M} - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${EVPATH_INSTALL_MODULE_DIR}) + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${EVPATH_INSTALL_MODULE_DIR} + WINDOWS_EXPORT_ALL_SYMBOLS TRUE) install(TARGETS ${M} DESTINATION ${EVPATH_INSTALL_MODULE_DIR} COMPONENT ${EVPATH_MODULE_COMPONENT_PREFIX}${M}) endforeach() diff --git a/cm.c b/cm.c index 9b1d5e4..82dde06 100644 --- a/cm.c +++ b/cm.c @@ -3773,7 +3773,11 @@ CM_init_select(CMControlList cl, CManager cm) lt_dladdsearchdir(EVPATH_MODULE_BUILD_DIR); lt_dladdsearchdir(EVPATH_MODULE_INSTALL_DIR); libname = malloc(strlen("lib" CM_LIBRARY_PREFIX "cm") + strlen(select_module) + strlen(MODULE_EXT) + 1); +#ifndef HAVE_WINDOWS_H strcpy(libname, "lib" CM_LIBRARY_PREFIX "cm"); +#else + strcpy(libname, CM_LIBRARY_PREFIX "cm"); +#endif strcat(libname, select_module); strcat(libname, MODULE_EXT); handle = CMdlopen(cm->CMTrace_file, libname, 0); diff --git a/cm_transport.c b/cm_transport.c index 33e7883..8d84cef 100644 --- a/cm_transport.c +++ b/cm_transport.c @@ -121,7 +121,11 @@ load_transport(CManager cm, const char *trans_name, int quiet) strlen(MODULE_EXT) + 1); +#ifndef HAVE_WINDOWS_H strcpy(libname, "lib" CM_LIBRARY_PREFIX "cm"); +#else + strcpy(libname, CM_LIBRARY_PREFIX "cm"); +#endif strcat(libname, trans_name); strcat(libname, MODULE_EXT); diff --git a/dlloader.c b/dlloader.c index e4c5ad3..8cc5813 100644 --- a/dlloader.c +++ b/dlloader.c @@ -184,11 +184,19 @@ CMdlsym(void *vdlh, char *sym) return NULL; #else dlhandle dlh = (dlhandle)vdlh; - char *tmp = malloc(strlen(sym) + strlen(dlh->lib_prefix) + 1); + char *tmp = malloc(strlen(sym) + strlen(dlh->lib_prefix) + 3); void *sym_val; strcpy(tmp, dlh->lib_prefix); strcat(tmp, sym); sym_val = dlsym(dlh->dlopen_handle, tmp); + if (!sym_val) { + // try with lib prefix + char *tmp2 = malloc(strlen(tmp) + 4); + strcpy(tmp2, "lib"); + strcat(tmp2, tmp); + sym_val = dlsym(dlh->dlopen_handle, tmp2); + free(tmp2); + } free(tmp); if (!sym_val) sym_val = dlsym(dlh->dlopen_handle, sym);