aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--src/CMakeLists.txt8
-rw-r--r--src/dlfcn.c11
3 files changed, 20 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 899334a..a8a3e65 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 -DDLFCN_WIN32_SHARED_ENTRYPOINT -D_DllMainCRTStartup=DllMainCRTStartup -nostartfiles -nostdlib -shared -o $@ $^ -lkernel32
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..2fbf0d9 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -15,6 +15,14 @@ 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 (MSVC)
20 set_property(TARGET dl APPEND PROPERTY COMPILE_OPTIONS $<$<NOT:$<CONFIG:Debug>>:/Zl /GS->)
21 else (MSVC)
22 set_property(TARGET dl APPEND PROPERTY COMPILE_DEFINITIONS $<$<NOT:$<CONFIG:Debug>>:_DllMainCRTStartup=DllMainCRTStartup>)
23 set_property(TARGET dl APPEND PROPERTY LINK_OPTIONS $<$<NOT:$<CONFIG:Debug>>:-nostartfiles -nostdlib -lkernel32>)
24 endif (MSVC)
25 set_property(TARGET dl APPEND PROPERTY COMPILE_DEFINITIONS $<$<NOT:$<CONFIG:Debug>>:DLFCN_WIN32_SHARED_ENTRYPOINT>)
18 target_compile_definitions(dl PUBLIC DLFCN_WIN32_SHARED) 26 target_compile_definitions(dl PUBLIC DLFCN_WIN32_SHARED)
19endif (BUILD_SHARED_LIBS) 27endif (BUILD_SHARED_LIBS)
20 28
diff --git a/src/dlfcn.c b/src/dlfcn.c
index c128579..a9c9d8b 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/* When requested defines DLL entry point which avoids using CRT library */
960#ifdef DLFCN_WIN32_SHARED_ENTRYPOINT
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