aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--src/CMakeLists.txt9
-rw-r--r--src/dlfcn.c11
3 files changed, 21 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 899334a..4042eca 100644
--- a/Makefile
+++ b/Makefile
@@ -32,7 +32,7 @@ libdl.a: $(SOURCES)
32 $(RANLIB) $@ 32 $(RANLIB) $@
33 33
34libdl.dll: $(SOURCES) 34libdl.dll: $(SOURCES)
35 $(CC) $(CFLAGS) $(SHFLAGS) -DDLFCN_WIN32_SHARED -shared -o $@ $^ 35 $(CC) $(CFLAGS) $(SHFLAGS) -DDLFCN_WIN32_SHARED -D_DllMainCRTStartup=DllMainCRTStartup -nostartfiles -nostdlib -lkernel32 -shared -o $@ $^
36 36
37libdl.lib: libdl.dll 37libdl.lib: libdl.dll
38 $(LIBCMD) /machine:i386 /def:libdl.def 38 $(LIBCMD) /machine:i386 /def:libdl.def
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9066e65..5dc21d3 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -15,6 +15,15 @@ set_target_properties(dl PROPERTIES DEFINE_SYMBOL "")
15 15
16# set shared mode for compiling library and propagate mode to cmake clients 16# set shared mode for compiling library and propagate mode to cmake clients
17if (BUILD_SHARED_LIBS) 17if (BUILD_SHARED_LIBS)
18 # for non-debug shared mode, avoid linking to CRT library as it is not needed
19 if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
20 if (MSVC)
21 set_property(TARGET dl APPEND_STRING PROPERTY COMPILE_FLAGS "/Zl")
22 else (MSVC)
23 set_property(TARGET dl APPEND_STRING PROPERTY COMPILE_FLAGS "-D_DllMainCRTStartup=DllMainCRTStartup")
24 set_property(TARGET dl APPEND_STRING PROPERTY LINK_FLAGS "-nostartfiles -nostdlib -lkernel32")
25 endif (MSVC)
26 endif (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
18 target_compile_definitions(dl PUBLIC DLFCN_WIN32_SHARED) 27 target_compile_definitions(dl PUBLIC DLFCN_WIN32_SHARED)
19endif (BUILD_SHARED_LIBS) 28endif (BUILD_SHARED_LIBS)
20 29
diff --git a/src/dlfcn.c b/src/dlfcn.c
index c128579..5ddf1a7 100644
--- a/src/dlfcn.c
+++ b/src/dlfcn.c
@@ -955,4 +955,15 @@ BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
955 (void) lpvReserved; 955 (void) lpvReserved;
956 return TRUE; 956 return TRUE;
957} 957}
958
959/* For non-debug DLL builds defines DLL entry point which avoids using CRT library */
960#if !defined( _DEBUG )
961#ifdef __cplusplus
962extern "C"
963#endif
964BOOL WINAPI _DllMainCRTStartup( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
965{
966 return DllMain( hinstDLL, fdwReason, lpvReserved );
967}
968#endif
958#endif 969#endif